寻找一个资源来解释为什么当我运行以下代码时,我的原始数组没有变化。

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只是在循环的每次迭代中调用一个临时变量。如果您使用了一个对象,但没有重新分配该变量,则您的值将保持不变

// 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]

10-07 19:38
查看更多