为什么循环保持等于两个变量?

时间:2018-05-30 00:12:08

标签: javascript loops for-loop foreach

为什么循环将变量值转换为另一个等于循环应该只改变的变量?

let arrr = [1,1,1,1,1];
let preArrr = [0,0,0,0,0];
preArrr = arrr;

  for (let i=0; i < arrr.length; i++) arrr[i] = i;

console.log(arrr, preArrr) // arrr = [0,1,2,3,4], preArrr = [0,1,2,3,4]

forEach循环给我相同的结果

arrr.forEach(function(e, i) { arrr[i] = i })
console.log(arrr, preArrr) // arrr = [0,1,2,3,4], preArrr = [0,1,2,3,4]

但是,如果我立即更改数组,它将无法连接

let arrr = [1,1,1,1,1];
let preArrr = [0,0,0,0,0];
preArrr = arrr;

  arrr = [0,1,2,3,4]

console.log(arrr, preArrr) // arrr1 = [0,1,2,3,4], preArrr1 = [1,1,1,1,1];

那么,如何避免这种连接,但仍然使用循环?我试图保存数组的先前状态

2 个答案:

答案 0 :(得分:1)

因为您将preArr更改为指向与arr相同的数组

执行preArr=arr时不会复制。相反,两个变量都是对完全相同的数组的引用

如果您要将原件复制到preArr使用Array#slice()

let arrr = [1, 1, 1, 1, 1];
let preArrr = arrr.slice();


for (let i = 0; i < arrr.length; i++) arrr[i] = i;

console.log('arrr', JSON.stringify(arrr))
console.log('preArrr', JSON.stringify(preArrr))

答案 1 :(得分:0)

我注意到slice()方法不会阻止对同一个数组的引用,如果要复制的数组有2维

避免这种情况:

@mean([2, 2, 5, 7])