为什么这个值在我的二维数组中的每个数组上更新?

Why is this value updating on each array inside my 2d array?

我有一个二维数组:

let arr = [ [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ]

当我尝试更新第二个位置的第一个子数组时:

arr[0][1] = 4

输出为:

[ [ 0, 4, 0, 0 ], [ 0, 4, 0, 0 ], [ 0, 4, 0, 0 ], [ 0, 4, 0, 0 ] ]

为什么所有的子阵列都在更新?

完整代码为:

let arr = [ [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ]
arr[0][1] = 4
console.log(arr)

您很可能错误地创建了数组。您的二维数组的元素引用了同一数组 4 次。

这是一个例子:

const array2d = new Array(4).fill([0,0,0,0]);

console.log(JSON.stringify(array2d));
array2d[1][1] = 1;
console.log(JSON.stringify(array2d));

虽然数组的长度为 4,但它的每个成员都被替换为相同的数组。 另一方面,映射它会给出不同的结果:

const array2d = Array.from({length: 4}, () => [0,0,0,0])

console.log(JSON.stringify(array2d));
array2d[1][1] = 1;
console.log(JSON.stringify(array2d));