【问题标题】:index confusion: nested JavaScript loops - forEach within a for loop索引混淆:嵌套的 JavaScript 循环 - forEach 在 for 循环中
【发布时间】:2015-11-15 04:22:56
【问题描述】:

我想在 for 循环中为数组的每个元素使用 forEach 函数,以将 for 循环的索引分配给元素。

我的代码:

for (var i = 0; i < 2; i++) {
console.log('i:', i);
["element0", "element1", "element2"].forEach(function logArrayElements(element, i) {
    console.log('element:', element, 'index:', i);
});
}

结果:

i: 0
element: element0 index: 0
element: element1 index: 1
element: element2 index: 2
i: 1
element: element0 index: 0
element: element1 index: 1
element: element2 index: 2

我在寻找什么:

i: 0
element: element0 index: 0
element: element1 index: 0
element: element2 index: 0
i: 1
element: element0 index: 1
element: element1 index: 1
element: element2 index: 1

【问题讨论】:

  • 你为什么要用两次变量名i
  • element3 ?你的意思是element2
  • @Ramanlfc 是的,对。更新了输出。

标签: javascript loops indexing foreach nested


【解决方案1】:

你说element3我假设你的意思是element2

for (var i = 0; i < 2; i++) {
console.log('i:', i);
["element0", "element1", "element2"].forEach(function (element, index) {
    console.log('element:', element, 'index:', i);
});
}

您使用i 作为循环计数器和forEach 中的索引

【讨论】:

    【解决方案2】:

    这是因为您提供了i 作为forEach 的第二个参数的名称,从外部“隐藏”了i。可变分辨率从内部到外部,内部优先。这意味着,回调将使用内部 i 而不是外部 i

    您可以做的是重命名这些变量中的任何一个,这样内部变量就不会影响外部变量。此外,i 只是一个坏名字。将其命名为更有意义的名称。

    【讨论】:

      【解决方案3】:

      您需要使用不同的变量。你使用了 'i' 两次。

      for (var i = 0; i < 2; i++) {
      console.log('i:', i);
      ["element0", "element1", "element3"].forEach(function logArrayElements(element, x) {
          console.log('element:', element, 'index:', x);
      });
      }
      

      【讨论】:

        猜你喜欢
        • 2022-11-16
        • 1970-01-01
        • 2021-03-11
        • 2016-06-16
        • 1970-01-01
        • 1970-01-01
        • 2018-09-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多