使用For ... Of循环来更改数组

时间:2018-01-30 05:35:23

标签: javascript

寻找资源来解释为什么当我运行下面的代码时,我的原始数组不会改变。

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

4 个答案:

答案 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;
&#13;
&#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实现此目的,它为数组中的每个值运行特定函数。

&#13;
&#13;
arr = [1,2,3,4];
arr.forEach((d, i, arr) => arr[i]*=2);
console.log(arr);
&#13;
&#13;
&#13;