forEach with myArray[i] or argument



Learning Javascript.我有一个关于forEach的问题。我不明白为什么这两个循环有不同的结果:

var myArray = [1,2,3,4,5];
myArray.forEach(function(value, i){
myArray[i] = value + value;
});
console.log(myArray); // [2,4,6,8,10];

var myArray = [1,2,3,4,5];
myArray.forEach(function(value){
value = value + value;
});
console.log(myArray); // [1,2,3,4,5]

我认为——也许我错了——.map 在操作数组并将结果存储在不同的数组中时更好,而在操作数组而不更改原始数组时 foreach 更好;但是,为什么我的第一个示例有效? ¿如果我想遍历修改其值的数组,我应该使用什么?

为什么我的第一个示例有效?

因为您将新值分配给数组索引(与第二个示例不同,在第二个示例中,您将新值分配给局部value变量,然后再也不使用它(。

如果我想遍历修改其值的数组,我应该使用什么?

forEach很好。

我不

明白为什么这两个循环有不同的结果:

因为,在第一个例子中,您将值赋回原始数组,在其他情况下,您只是遍历它而不操作任何值。

您可以使用第三个参数来访问迭代数组,因为这使您可以独立访问回调内部的数组。

例如,回调现在是一个命名函数。该函数只能访问回调的已知参数。外部数组会随着其他调用而变化,因此固定数组将始终更改提到的数组。

function double(value, i, array) {
array[i] = value + value;
}
var array1 = [1, 2, 3, 4, 5],
array2 = [42, 43, 44];
array1.forEach(double);
array2.forEach(double);
console.log(array1); // [2, 4, 6, 8, 10];
console.log(array2); // [84, 86, 88];
.as-console-wrapper { max-height: 100% !important; top: 0; }

最新更新