0

我正在尝试修改二维数组中的一个值。但是,根据数组的构造方式,我发现了一些奇怪的行为。

matrix 和 matrix2 之间的唯一区别是它们的构造方式。但是,当我更改 [1][1] 值时,matrix2 中的所有 [x][1] 值都会更改:

矩阵:

[ [ 0, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 0 ] ]

矩阵2(意外):

[ [ 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);

谁能解释发生了什么?

4

1 回答 1

2
[row, row, row]

您刚刚创建了一个数组,其中包含对同一内部数组的三个引用。

通过对它的任何引用都可以看到对内部数组的更改。

您想要创建内部数组的三个副本。
您可以通过调用来创建数组的浅拷贝.slice()

于 2013-08-13T21:14:11.327 回答