javascript 在所有行中插入数组的数组

bnl4lu3b  于 2022-12-17  发布在  Java
关注(0)|答案(2)|浏览(196)

下面是一段简单的代码,但似乎每行都有相同的数组示例,因此当我更改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]]
at0kjp5o

at0kjp5o1#

new Array(n).fill(0)被创建一次,然后传递给.fill方法,所以实际上,你在结果数组中得到了同一数组的n副本(精确地说是引用)。你可以添加map函数来生成n新数组,如下所示:

new Array(n).fill(0).map(x => new Array(n).fill(0));

通过这种方式,map每次都创建新数组,因此您得到的是n不同的数组,其中填充了0
演示片段:

const n = 4;

let board = new Array(n).fill(0).map(x => new Array(n).fill(0));

board[0][0] = 1;
console.log(board)
disho6za

disho6za2#

board数组中的每个填充项都使用相同的new Array(n).fill(0)引用,因此对一个嵌套数组的更改会影响所有其他嵌套数组。另一种策略是使用for循环为每个要填充的项创建不同的嵌套循环示例。

let board = new Array(n)
for (let i=0; i < n; i++)
    board[i] = new Array(n).fill(0);

相关问题