[英]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 不是一種在分配時復制的語言。 它使用引用並存儲它們。 在這里,您實際上只是在復制對數據的引用,而不是實際數據。 有多種方法可以幫助您解決這個問題。
最簡單的方法是使用 var arrclone = JSON.parse(JSON.stringify(arr))
我們還可以使用數組解構,它看起來像這樣: var arrclone = [...arr]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.