使用填充方法创建2D数组

时间:2018-06-24 20:22:20

标签: javascript arrays

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

let map = new Array(3)
            .fill(new Array(3)
                .fill(0));

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

map[1][1] = 1;

我希望得到结果:

[[0, 0, 0],[0, 1, 0],[0, 0, 0]]

但是我收到了:

[[0, 1, 0],[0, 1, 0],[0, 1, 0]]

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

2 个答案:

答案 0 :(得分: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)

此处将为每个元素调用函数,以确保为每个元素创建唯一的数组。

答案 1 :(得分:0)

改为使用此:

maps = new Array(3)
            .fill().map(u => new Array(3).fill(0));

maps[1][1] = 1;