現在、私はjavascriptの4-in-a-rowのMinimaxアルゴリズムに取り組んでいます。配列内に可能な移動を格納し、各ブランチの配列内に配列をネストすることにしました。2D配列を3D配列に入れ子にしたときの奇妙な振る舞い
しかし、配列の特定の値を編集しようとすると、同じ列内の他のすべての値が編集されます。
コード:
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);
クローム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 ] ] ]
何が起こるが、dosen't必要があります。
[ [ [ 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