为什么循环将变量值转换为另一个等于循环应该只改变的变量?
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];
那么,如何避免这种连接,但仍然使用循环?我试图保存数组的先前状态
答案 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])