【问题标题】:Creating 2D array with fill method [duplicate]使用填充方法创建二维数组
【发布时间】:2018-06-24 20:22:19
【问题描述】:

我正在尝试使用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]]

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

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    问题在于fill(new Array(3)) 首先创建了一个新数组,然后用它填充数组,因此每个元素都指向同一个数组引用。当您更改一个时,它会反映在所有这些中。

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

    let map = Array.from(Array(3), () => new Array(3).fill(0)) 
    
    map[1][1] = 1;
    console.log(map)

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

    【讨论】:

      【解决方案2】:

      改用这个:

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

      【讨论】:

        猜你喜欢
        • 2017-03-22
        • 2021-12-08
        • 2011-01-30
        • 1970-01-01
        • 1970-01-01
        • 2016-05-27
        • 1970-01-01
        • 2015-12-13
        相关资源
        最近更新 更多