索引混淆:嵌套 JavaScript 循环 - forEach 在 for 循环中

index confusion: nested JavaScript loops - forEach within a for loop

我想在 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 作为 forEach、"shadowing" 和 i 的第二个参数的名称。可变分辨率从内到外开始,内部优先。这意味着,回调将使用内部 i 而不是外部 i.

您可以做的是重命名其中一个变量,这样内部变量就不会遮盖外部变量。另外,i 只是一个坏名字。给它起一个更有意义的名字。

您需要使用不同的变量。您正在使用 '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);
});
}

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

中的索引