forEach with myArray [i]或argument

时间:2017-08-13 18:40:10

标签: javascript arrays foreach

学习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更好;但是,为什么我的第一个例子有效呢? ¿如果我想遍历修改其值的数组,我该怎么用?

3 个答案:

答案 0 :(得分:1)

  

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

因为您为数组索引分配了一个新值(与您为本地value变量分配新值然后再从不使用它的第二个示例不同)。

  

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

forEach就可以了。

答案 1 :(得分:0)

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

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

let post = ["word" : "\(updated word)"]
ref.child("XXX").child("\(word)").updateChildValues(post) // word is the string passed from the previous view controller
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];

答案 2 :(得分:0)

  

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

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