首页 > 解决方案 > 更新 Javascript 二维数组中的元素会更新整个列

问题描述

我在Javascript中创建了一个二维数组(4x4),如下所示:

let visited = new Array(4).fill(new Array(4).fill(false));
console.log(visited);

[
  [ false, false, false, false ],
  [ false, false, false, false ],
  [ false, false, false, false ],
  [ false, false, false, false ]
]

当我尝试更新单个元素时,它最终会更新整个列。为什么会这样?

visited[0][0] = true;
console.log(visited);

你可以看到这个repl

预期的:

[
  [ true, false, false, false ],
  [ false, false, false, false ],
  [ false, false, false, false ],
  [ false, false, false, false ]
]

实际的:

[
  [ true, false, false, false ],
  [ true, false, false, false ],
  [ true, false, false, false ],
  [ true, false, false, false ]
]

标签: javascriptarrayspointersmatrixmultidimensional-array

解决方案


的文档Array.fill是您的朋友:

请注意,数组中的所有元素都将是这个精确值。

这告诉您每个子数组实际上都是相同的数组。因此,如果你改变一个,你就改变了它们。

查看下面的代码,您会看到第一个比较是false,而第二个比较是true

console.log([false,false,false,false] ===[false,false,false,false])

const arr = new Array(4).fill([false,false,false,false]);

console.log(arr[0] === arr[1]);


推荐阅读