如何在javascript中创建一个2d的零数组?

Tra*_*vis 9 javascript multidimensional-array

有一种简单的方法可以在javascript中以编程方式创建二维数组吗?

我不想要的:

var array2D = [ 
  [0,0,0],
  [0,0,0],
  [0,0,0]
]
Run Code Online (Sandbox Code Playgroud)

Fat*_*lin 26

解决方案2017:

晚到了派对,但是这篇帖子在Google搜索结果中依然很高.

要创建具有给定大小的 2D阵列(适用于更多维度):

let array = Array(rows).fill().map(() => Array(columns));
Run Code Online (Sandbox Code Playgroud)

预填充2D阵列:

let array = Array(rows).fill().map(() => Array(columns).fill(0));
Run Code Online (Sandbox Code Playgroud)

例如:

Array(2).fill().map(() => Array(3).fill(42));
// Result:
// [[42, 42, 42],
//  [42, 42, 42]]
Run Code Online (Sandbox Code Playgroud)

警告:

Array(rows).fill(Array(columns)) 将导致所有行都是对同一个数组的引用!!


2018年9月24日更新(感谢@Tyler):

另一种可能的方法是使用Array.fill()应用地图功能.

例如:

Array.from(Array(2), _ => Array(3).fill(43));
// Result:
// [[43, 43, 43],
//  [43, 43, 43]]
Run Code Online (Sandbox Code Playgroud)


基准测试:

map-approach似乎快了大约70%-80%.你可以在这里查看:

https://jsperf.com/multidimensional-array-map-vs-fill


Joh*_*ica 11

好吧,你可以编写一个辅助函数:

function zeros(dimensions) {
    var array = [];

    for (var i = 0; i < dimensions[0]; ++i) {
        array.push(dimensions.length == 1 ? 0 : zeros(dimensions.slice(1)));
    }

    return array;
}

> zeros([5, 3]);
  [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

奖励:处理任意数量的维度.

  • 这可以写得更清楚.通常,在编写递归函数时,应确保容易识别基本情况和归纳情况.在上面的代码中,两者都在同一条线上 - 非常令人困惑.相反,我建议你检查函数顶部的`dimensions.length === 1`条件,并创建两个`for`循环 - 一个创建一个0的数组(基本情况)和一个使用`zeros`函数调用(归纳案例)创建一个数组.虽然生成的代码将更加冗长,但它更容易混淆. (2认同)

Moo*_*Goo 8

function zero2D(rows, cols) {
  var array = [], row = [];
  while (cols--) row.push(0);
  while (rows--) array.push(row.slice());
  return array;
}
Run Code Online (Sandbox Code Playgroud)


Gra*_*ler 5

您可以使用以下函数创建二维数组

const zeros = (m, n) => [...Array(m)].map(e => Array(n).fill(0));

console.log(zeros(3, 4));

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