簡體   English   中英

為什么我的克隆數組代碼不起作用 JavaScript

[英]Why my code to clone an array doesn't work JavaScript

因此,由於 JavaScript 不允許您使用“=”復制數組,所以我必須編寫這段代碼。 但它不起作用

let arr = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];
var arrclone = [];

for (let x = 0; x < arr.length; x++) {
  for (let y = 0; y < arr[x].length; y++) {
    arrclone[x][y] = arr[x][y];
  }
}
console.log(arrclone);

它說

arrclone[x][y] = arr[x][y];
                    ^
TypeError: Cannot set property '0' of undefined. 

怎么會 undefined 它們都已經被聲明了。 抱歉,我是初學者,如果我的問題看起來很愚蠢,我很抱歉。

開始時,數組的每一行都是空的。 所以將它初始化為一個空的數組行:

for (let x = 0; x < arr.length; x++) {
  // Use this...
  arrclone[x] = [];     // ========================> You missed this line.
  for (let y = 0; y < arr[x].length; y++) {
    arrclone[x][y] = arr[x][y];
  }
}

僅供參考,對於正確的方法,請使用Array.slice() (但僅適用於原始值,請參見此處的問題)。

理想情況下,您應該使用Array.slice()來復制 arrays:

 let arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; var arrclone = arr.map(e => e.slice()); console.log(arrclone);

Javascript 不是一種在分配時復制的語言。 它使用引用並存儲它們。 在這里,您實際上只是在復制對數據的引用,而不是實際數據。 有多種方法可以幫助您解決這個問題。

  1. 最簡單的方法是使用 var arrclone = JSON.parse(JSON.stringify(arr))

  2. 我們還可以使用數組解構,它看起來像這樣: var arrclone = [...arr]

暫無
暫無

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

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