学习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更好;但是,为什么我的第一个例子有效呢? ¿如果我想遍历修改其值的数组,我该怎么用?
答案 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)
我不明白为什么这两个循环有不同的结果:
因为,在第一个示例中,您将值分配回原始数组,在其他情况下,您只是遍历它而不是操纵任何值。