簡體   English   中英

為什么循環保持兩個變量相等?

[英]Why loop keep equaling of two variables?

為什么循環將變量值轉換為另一個變量,該變量等於只能改變哪個循環?

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)) 

我注意到slice()方法不會阻止引用同一數組,如果要復制的數組有2個尺寸

為了避免這種情況:

function slice2D(arr) {
  let store = [];
  for (let i = 0; i < arr.length; i++) {
    store.push(arr[i].slice());
  }
  return store;
}

let pasteArr = slice2D(copyArr);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM