2015-12-06 32 views
2

当创建在Chrome的控制台这样一个新的多维数组:在多维数组改变一个细胞更新整列

var array = Array(10).fill(Array(10).fill(false)); 

阵列看上去如预期(与console.table检查): enter image description here

但是,当试图改变只有一个格数组中:array[5][5] = true;一些奇怪的事情发生: enter image description here

我有蜜蜂因为这一点,我的头撞在墙上一段时间,但无法弄清楚。这可能是一个错误,因为Array.fill是一个实验/新功能?

+0

请参阅[Array.fill给出相同的对象重复。为什么?](https://stackoverflow.com/q/43294552/1048572)和[通过填充vs常规数组填充阵列时不想要的结果](https://stackoverflow.com/q/32349148/1048572) – Bergi

回答

2

这是因为你实际上只创建了两个数组。你创建了一个具有10个元素的内部数组,然后是一个具有10个元素的外部数组,每个元素引用相同的内部数组。当您更改内部数组的元素,然后查看外部数组时,您会在内部数组中重复执行10次相同的更改。

用循环创建外部数组,以便为​​外部循环的每个元素创建一个新的内部数组。

+0

就是这样, 谢谢!我最终创建了这样的数组:'Array(10).fill()。map(_ => Array(10).fill(false))'。 – bodyflex