代码:https://codesandbox.io/s/github/nieroda/js_err
在函数endTurn中
console.log(`GameBoard Before`)
console.log(gameBoardCopy)
gameBoardCopy[currentRow][4] = { numColorMatch: 2, numExactMatch: 2 }
console.log(`GameBoard After`)
console.log(gameBoardCopy)
请参见控制台输出
Before:
5: Array(5)
0: "BlueViolet"
1: "BlueViolet"
2: "BlueViolet"
3: "BlueViolet"
4: {numColorMatch: 0, numExactMatch: 0}
After
5: Array(5)
0: "BlueViolet"
1: "BlueViolet"
2: "BlueViolet"
3: "BlueViolet"
4: {numColorMatch: 0, numExactMatch: 0}
我不知道为什么它不工作?
1条答案
按热度按时间wz3gfoph1#
你的数据正在更新,但是它在代码的其他地方发生了变化,而且
console.log
并不是足够直接(特别是在console.log
周围的代码沙箱wrapper)。因此,为了解决这个问题,请执行以下操作之一:JSON.stringify
在将数据传递给console.log
之前先将其保存。这将把数据冻结成一个字符串。console.log
之前,您的数据结构。(问题是there is no built-in deep copy for JS)debugger
语句。(如果调试器控制台被隐藏,则通常会忽略debugger
语句,因此请确保它已打开)。这将中断正常流并强制刷新日志,从而提供更准确的数据。这回答了你的问题,但不是你的问题,那就是你正在突变你不期望的东西。这可以通过确保你首先是(deep) copying你正在变异的一切来解决,而不是使用mutation(像Immutable.js这样的库可以帮助你),或者使用像MobX这样的东西,它允许你变异事物,然后订阅这些变异事件。