使用fill方法创建2D数组

Anw*_*rus 1 javascript arrays

我正在尝试使用fill函数创建二维数组.它看起来像这样:

let map = new Array(3)
            .fill(new Array(3)
                .fill(0));
Run Code Online (Sandbox Code Playgroud)

当我尝试在特定索引处设置一个值时出现问题:

map[1][1] = 1;
Run Code Online (Sandbox Code Playgroud)

我希望有结果:

[[0, 0, 0],[0, 1, 0],[0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

但我收到了这个:

[[0, 1, 0],[0, 1, 0],[0, 1, 0]]
Run Code Online (Sandbox Code Playgroud)

看起来所有这些子阵列都引用了一个数组,但为什么呢?

Mar*_*yer 5

问题是fill(new Array(3))首先创建一个新数组,然后使用它填充数组,以便每个元素指向相同的数组引用.当你改变它时,它会反映在所有这些中.

您可以使用Array.from()外部数组,它需要一个函数.这将允许您为每个数组创建一个新数组:

let map = Array.from(Array(3), () => new Array(3).fill(0)) 

map[1][1] = 1;
console.log(map)
Run Code Online (Sandbox Code Playgroud)

在这里,它将为每个元素调用函数,以确保为每个元素创建一个唯一的数组.