寻找资源来解释为什么当我运行下面的代码时,我的原始数组不会改变。
arr = [1,2,3,4];
for(let val of arr){
val = val * 2;
console.log(val);
}
console.log(arr);
我正在学习... for和for ... of循环并且不确定为什么我的console.log(arr)没有打印出来[2,4,6,8]。
答案 0 :(得分:1)
您正在修改而不是插入。
最好在这种情况下使用for each
。这样您就可以修改数组了。使用of
会使事情变得复杂。
arr = [1,2,3,4];
arr.forEach(function(part, index, array) {
array[index] = array[index]*2;
});
console.log(arr);

答案 1 :(得分:1)
使用for循环,这使您可以进行分配"坚持"在原始数组中。
arr = [1,2,3,4];
for (var i=0; i < arr.length; i++) {
arr[i] = 2*arr[i];
console.log(arr[i]);
}
&#13;
您最初所做的事情的问题是val
只是一个变量,与底层数组没有真正的连接。因此,加倍val
对数组本身没有影响。
答案 2 :(得分:1)
这里的问题是标识符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]
答案 3 :(得分:1)
您也可以使用forEach
实现此目的,它为数组中的每个值运行特定函数。
arr = [1,2,3,4];
arr.forEach((d, i, arr) => arr[i]*=2);
console.log(arr);
&#13;