为什么我的克隆数组代码不起作用 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()
(but only for primitive values, see the problem here)。
理想情况下,您应该使用 Array.slice()
来复制数组:
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]
因此,由于 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()
(but only for primitive values, see the problem here)。
理想情况下,您应该使用 Array.slice()
来复制数组:
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]