index confusion:嵌套的JavaScript循环 - for循环中的forEach

时间:2015-11-15 04:22:57

标签: javascript loops indexing foreach nested

我想在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

3 个答案:

答案 0 :(得分:2)

您说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

中的索引

答案 1 :(得分:1)

那是因为您提供了i作为forEach的第二个参数的名称,&#34;阴影&#34;来自外部的i。变量分辨率从内到外开始,内部优先。这意味着,回调将使用内部i而不是外部i

你可以做的是重命名其中一个变量,以便内部变量不会影响外部变量。此外,i只是一个坏名字。将其命名为更有意义的东西。

答案 2 :(得分:0)

您需要使用不同的变量。你正在使用&#39; i&#39;两次。

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);
});
}