0

2D 配列の 1 つの値を変更しようとしています。ただし、配列の構築方法に基づいて、奇妙な動作を見つけています。

matrix と matrix2 の唯一の違いは、その構築方法です。ただし、[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);

誰が何が起こっているのか説明できますか?

4

1 に答える 1

2
[row, row, row]

同じ内部配列への 3 つの参照を持つ配列を作成しました。

内部配列への変更は、それを参照することで確認できます。

内側の配列の 3 つのコピーを作成します。
を呼び出して、配列の浅いコピーを作成できます.slice()

于 2013-08-13T21:14:11.327 に答える