【发布时间】:2018-02-02 06:20:48
【问题描述】:
我在一行中用 0 初始化一个 2x2 3D 数组:
let matrix = new Array(2).fill(new Array(2).fill(0));
这会导致
[[0,0], [0,0]]
执行matrix[0][0] = 1 会导致:
[[1, 0],[1, 0]]
这里发生了什么?为什么两个0-th 索引都设置为1?
【问题讨论】:
-
JS 数组是可变的。
-
见this。
-
new Array(2).fill(0)只被调用一次。想象一下这意味着什么。慢慢来…… 提示:这个游戏中只有 0 个零。这只是stackoverflow.com/questions/4220611/…的另一种风格@ -
一行解决方案:
let matrix = Array.from({length:2},()=>new Array(2).fill(0)) -
List of lists changes reflected across sublists unexpectedly 的可能重复项(虽然链接是 python,但推理是相同的)。
标签: javascript