为什么我的克隆数组代码不起作用 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 不是一种在赋值时进行复制的语言。它使用引用并存储它们。在这里,您实际上只是在复制对数据的引用,而不是实际数据。有多种方法可以帮助您。

  1. 最简单的方法就是使用 var arrclone = JSON.parse(JSON.stringify(arr))

  2. 我们也可以使用数组解构,它看起来像这样: var arrclone = [...arr]