目前,我正在爲JavaScript中的四行一行使用Minimax算法。我決定將可能的移動存儲在一個數組中,繼續爲每個分支在數組中嵌套數組。將二維數組嵌套到三維數組中時的奇怪行爲
但是,當我嘗試編輯數組中的某個值時,它會編輯同一列中的所有其他值。
代碼:
var BOARD = [
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
];
// Put 3 x 2D Arrays into one 3D Array
var NODE_TREE = [BOARD, BOARD, BOARD];
NODE_TREE[1][2][0] = 2;
console.log(NODE_TREE);
Chrome的V8解釋輸出:
[ [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 2, 0, 0 ] ],
[ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 2, 0, 0 ] ],
[ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 2, 0, 0 ] ] ]
應該發生什麼,但這麼想的:
[ [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ],
[ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 2, 0, 0 ] ],
[ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ] ]
的Javascript似乎忽視了第一個維度索引號。只有當我使用嵌套在數組中的現有數組時,纔會發生此問題。如果我從頭開始製作3D陣列,這個錯誤不會發生。
大家一個參考添加到陣列,wihout製作值的深層副本。 –
@NinaScholz請你舉個例子,我查了一下引用是什麼,然而,我找不到任何有用的東西。 – imavajine