我正在实现约翰·康威的生命游戏,但是我遇到了一个奇怪的问题。以下是引起问题的代码的简短版本:
作为对此代码的回应,JavaScript会打印出
我认为执行
无论如何,这里发生了什么情况,我该如何成功地创建
let lifeMap = [
[true, false, false],
[false, false, false],
[false, false, false]
];
let oldLifeMap = lifeMap.slice();
for (let row = 0; row < lifeMap.length; row++) {
for (let val = 0; val < lifeMap[row].length; val++) {
let bool = lifeMap[row][val];
let newBool = false; // here is where I would determine if cell is alive/dead
lifeMap[row][val] = newBool;
if (row === 0 && val === 0) console.log("at (0,0)", oldLifeMap[0][0]);
}
}
作为对此代码的回应,JavaScript会打印出
at (0,0) false
。我需要它在下一代开始之前保持为true
。我认为执行
let oldLifeMap = lifeMap.slice()
可以解决这个问题,但事实并非如此,而且我不确定原因。(难道它不应该将二维数组复制并创建第二个引用吗?)无论如何,这里发生了什么情况,我该如何成功地创建
lifeMap
的一个真正副本呢?
.map(a => a.slice())
- Patrick Robertsvar copy = JSON.parse(JSON.stringify(lifeMap))
- epascarello