寻找一个资源来解释为什么当我运行以下代码时,我的原始数组不会改变。
arr = [1,2,3,4];
for(let val of arr){
val = val * 2;
console.log(val);
}
console.log(arr);
我正在学习for...in和for...of循环,但不确定为什么我的console.log(arr)没有打印出[2,4,6,8]。
寻找一个资源来解释为什么当我运行以下代码时,我的原始数组不会改变。
arr = [1,2,3,4];
for(let val of arr){
val = val * 2;
console.log(val);
}
console.log(arr);
我正在学习for...in和for...of循环,但不确定为什么我的console.log(arr)没有打印出[2,4,6,8]。
val
被覆盖了。每次迭代循环时,都会调用另一个整数并将其赋值给val,因此val只是一个临时变量。如果您使用了对象,并且没有重新分配变量,则您的值将保持不变。// Object values
var x = [{z:1},{z:2}]
for(let y of x){
// No reassignment
y.z=3;
}
console.log(x); //[{"z":3},{"z":3}]
var q = [5,6,7];
for( i in q){
q[i] = q[i] * 2;
}
console.log(q); //[10, 12, 14]
for each
循环。这样你就可以修改数组了。使用of
会使事情变得复杂。
arr = [1,2,3,4];
arr.forEach(function(part, index, array) {
array[index] = array[index]*2;
});
console.log(arr);
for..in
。它会循环原型链,导致意外的结果。 - sabithpockerarr = [1,2,3,4];
for (var i=0; i < arr.length; i++) {
arr[i] = 2*arr[i];
console.log(arr[i]);
}
val
只是一个变量,与底层数组没有实际联系。因此,将val
加倍对数组本身没有影响。forEach
来实现这一点,它会在数组中的每个值上运行特定的函数。
arr = [1,2,3,4];
arr.forEach((d, i, arr) => arr[i]*=2);
console.log(arr);
val
而不是数组本身中的任何内容。 - Jaromanda X