有人可以告诉我为啥 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===02===13===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,这是一个用于检查它是不是存在于数组中的变量 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

有人能告诉我为啥这段代码似乎可以工作,但不能……拜托?

有人能告诉我为啥当我的游戏中的相机移动时一切都会振动吗?

有人能告诉我为啥这个方法会进入无限循环吗?

有人能告诉我为啥我的加密有效但我的解密无效吗?看下面的图片

有人能告诉我为啥这个 JSfiddle 在播放完后会重复第一首歌吗?

即使没有人告诉它,为啥 QScrollArea 在多点触控上滚动?