gpt4 book ai didi

javascript - 在 3D 数组中嵌套 2D 数组时的奇怪行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:12:05 24 4
gpt4 key购买 nike

目前,我正在为 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 阵列,则不会发生此错误。

最佳答案

对于惰性初始化,您可以使用已解析的 JSON字符串。

这会生成一个不引用原始对象的独立对象。

var BOARD = [
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
],
JSON_BOARD = JSON.stringify(BOARD),
NODE_TREE = [JSON.parse(JSON_BOARD), JSON.parse(JSON_BOARD), JSON.parse(JSON_BOARD)];

NODE_TREE[1][2][0] = 2;
console.log(NODE_TREE);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 在 3D 数组中嵌套 2D 数组时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44325821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com