有人可以告诉我为啥 foreachloop 不将 i 作为 1,这是一个用于检查它是不是存在于数组中的变量 [关闭]
Posted
技术标签:
【中文标题】有人可以告诉我为啥 foreachloop 不将 i 作为 1,这是一个用于检查它是不是存在于数组中的变量 [关闭]【英文标题】:can someone please tell me why foreachloop is not taking i as 1 which is a variable that is used to check whether it is in exist in the array or not [closed]有人可以告诉我为什么 foreachloop 不将 i 作为 1,这是一个用于检查它是否存在于数组中的变量 [关闭] 【发布时间】:2021-07-05 10:04:34 【问题描述】: k=[1,2,3,4,5,6,7,8]
i=1
k.forEach((element,i) =>
if(element===i)
console.log("TRUE")
else
console.log("False")
);
输出:假 错误的 错误的 错误的 错误的 错误的 错误的 假的
我排除了真,但它给了我假怎么办? 伙计们,我知道数组索引从 0 开始,我想使用 foreach 而不是 forloop 检查数组中是否存在或不存在元素,谢谢大家的帮助,如果你们,我只是一个初学者认为这是一个愚蠢的问题,我很抱歉,谢谢大家
【问题讨论】:
为什么要期待一个真实的?数组索引从零开始。i
在此代码中forEach
成为索引。
因为i
是元素的索引。您正在比较 1===0
、2===1
、3===2
等。由于数组是 0 索引(而不是 1 索引),它永远不会是真的。
forEach
循环对于从数组中查找单个值是不切实际的,因为您无法中断循环。
所以,您想知道k
是否包含i
,但您不想编写k.includes(i)
,您想编写一个全新的内部forEach
循环,即慢得多并且会迭代整个数组并且不能被中断?做我的客人
【参考方案1】:
您有两个名为i
的变量。您认为比较中使用了哪一个?
看看the documentation for forEach
。回调函数的第二个参数是数组的索引。由于数组索引从 0
开始,而数组值从 1
开始,因此数组中任何元素的索引永远不会等于该元素本身。
如果你想使用你在函数外部定义的i
变量,不要用函数的第二个参数来隐藏它:
k=[1,2,3,4,5,6,7,8]
i=1
k.forEach((element) =>
if(element===i)
console.log("TRUE")
else
console.log("False")
);
【讨论】:
是的或k.includes(i)
@JeremyThille:确实。虽然结果输出当然会有所不同。 (在我看来更有用,但不同。)OP 也可以只使用普通循环,但特别指出他想用.forEach()
来做这件事,所以这实际上只是指出了实现中的错误。跨度>
作为未来读者的旁白,此时.includes()
需要一个用于 IE 的 polyfill。使用.indexOf()
并检查非负结果的旧方法更为普遍。如果你需要支持IE。如果你这样做了,我很同情你。【参考方案2】:
i
将是您当前element
的索引。
k=[1,2,3,4,5,6,7,8]
k.forEach((element,i) =>
if(element===(i+1))
console.log("TRUE")
else
console.log("False")
);
【讨论】:
【参考方案3】:你忘记了 i++,把 k.forEach(element,i) 中的 i 去掉
k=[1,2,3,4,5,6,7,8]
i=1
k.forEach((element) =>
if(element===i)
console.log("TRUE")
else
console.log("False")
i++;
);
更新 感谢您更新您的问题,在这种情况下试试这个:
k=[1,2,3,4,5,6,7,8]
i=1
k.forEach((element) =>
if(element===i)
console.log("TRUE")
else
console.log("False")
);
因为你在foreach循环中调用了i,所以i会改变,永远不等于i,下面检查试试
k=[1,2,3,4,5,6,7,8]
i=1
k.forEach((element,i) =>
console.log('i: ' + i);
console.log('element: ' + element);
);
注意,以后请尽量把你的问题表述得更清楚
【讨论】:
这究竟能达到什么目的? OP想知道k
是否包含i
我不太明白这个问题,但要达到与上述 sn-p 相同的结果,您可以省略i=1
并执行k.forEach((element,i)
,然后执行if(element===(i+1))
,因为这是一个更整洁的方式。以上是关于有人可以告诉我为啥 foreachloop 不将 i 作为 1,这是一个用于检查它是不是存在于数组中的变量 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章