目前,我正在为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