我正在尝试修改2D数组中的一个值。但是我发现了一些基于数组构造方式的奇怪行为。
矩阵和矩阵2之间的唯一区别在于它们是如何构造的。但是,当我更改[1] [1]值时,matrix2中的所有[x] [1]值都会更改:
矩阵:
[ [ 0, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 0 ] ]
Matrix2(意外):
[ [ 0, 1, 0 ], [ 0, 1, 0 ], [ 0, 1, 0 ] ]
代码:
var row = [0,0,0];
var matrix = [[0,0,0],[0,0,0],[0,0,0]];
var matrix2 = [row, row, row];
console.log(matrix);
console.log(matrix2);
matrix[1][1] = 1;
matrix2[1][1] = 1;
console.log(matrix);
console.log(matrix2);
有人可以解释发生了什么吗?
答案 0 :(得分:2)
[row, row, row]
你刚刚制作了一个数组,其中有三个引用相同的内部数组。
通过对它的任何引用都可以看到对内部数组的更改。
您想要创建内部数组的三个副本
您可以通过调用.slice()
来创建数组的浅表副本。