更改多维数组中的一个单元格会更新整列

bod*_*lex 5 javascript google-chrome

在 Chrome 的控制台中创建一个新的多维数组时,如下所示:

var array = Array(10).fill(Array(10).fill(false));
Run Code Online (Sandbox Code Playgroud)

数组看起来如预期(检查console.table): 在此处输入图片说明

但是当试图只改变数组中的一个单元格array[5][5] = true;时:发生了一些奇怪的事情: 在此处输入图片说明

由于这个原因,我一直用头撞墙一段时间,但无法弄清楚。这可能是一个错误,因为 Array.fill 是一个实验性/新功能吗?

Jas*_*son 6

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

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

  • 就是这样,谢谢!我最终创建了这样的数组:`Array(10).fill().map(_ => Array(10).fill(false))`。 (2认同)