下面是一段简单的代码,但似乎每行都有相同的数组示例,因此当我更改board[0][0]
中的值时,它会以某种方式更改所有行中的值。
我怎样才能正确地初始化电路板,使每一行都是唯一的?寻找一个圆滑的解决方案或一些调整,而不是写出所有的数字或有一个for循环或什么的。或者也许最圆滑的解决方案是有一个for循环?
const n = 4;
let board = new Array(n).fill(new Array(n).fill(0));
board[0][0] = 1;
console.log(board)
输出:
[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]
2条答案
按热度按时间at0kjp5o1#
new Array(n).fill(0)
被创建一次,然后传递给.fill
方法,所以实际上,你在结果数组中得到了同一数组的n
副本(精确地说是引用)。你可以添加map
函数来生成n
新数组,如下所示:通过这种方式,
map
每次都创建新数组,因此您得到的是n
不同的数组,其中填充了0
。演示片段:
disho6za2#
根
board
数组中的每个填充项都使用相同的new Array(n).fill(0)
引用,因此对一个嵌套数组的更改会影响所有其他嵌套数组。另一种策略是使用for循环为每个要填充的项创建不同的嵌套循环示例。