javascript - 为什么循环保持两个变量相等?

标签 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];

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

最佳答案

因为您将 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))

关于javascript - 为什么循环保持两个变量相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50594662/

相关文章:

python - 如何使我的 python 集成更快?

Java:消除具有相同数字的结果

javascript - CoffeeScript 绑定(bind)变量

excel - VBA:如果在引用表中找到值,则将数据+字段从源表拉到目标表

python - 为什么 Python CONTINUE LOOP 允许外循环,而 BREAK LOOP 不允许?

c - 如何打印所有这些 block ?

vba - Next 没有 For/For 没有 Next 错误

javascript - 表中的 Laravel 简单模式不起作用

javascript - 为什么禁用 select html 后无法启用它?

javascript - 如何将带有 HTML 信息的 Json 文件放入 DOM 中?