如何优雅地创建全零的二维数组

1,178 阅读1分钟

说明

近期遇到了需要创建二维数组的需求,但是当时在各个博客找到的都是使用嵌套循环创建二维数组,个人不喜,恰巧项目内使用了lodash,因此利用了lodash的chunk()、fill()方法来创建二维数组,使得代码看起来更加优雅。

  • 方式一

  • 利用两层嵌套的循环填充数组。
  • 优点:简单。
  • 缺点:代码中含有两层 for 结构,不易于代码阅读;代码冗余。
// 方式一
let m = 2; // 二维数组的行数
let n = 4; // 二维数组的列数
let arr = new Array(); // 先声明一维
for (let i = 0; i < m; i++) {
  arr[i] = new Array(); // 再声明二维
  for (let j = 0; j < n; j++) { // 二维长度
    arr[i][j] = 0;
  }
}
console.log(arr); // [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
  • 方式二

  • 先填充 m * n 长度的一维数组,将数组拆分成多个 n 长度的区块,并将这些区块组成一个新数组。
  • 优点:优雅
  • 缺点:lodash的学习存在少量学习成本。
  • lodash函数说明
  • _.chunk(array, [size=1])。将数组(array)拆分成多个 size 长度的区块,并将这些区块组成一个新数组。如果array 无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。
  • _.fill(array, value, [start=0], [end=array.length])。使用 value 值来填充(替换) array,从start位置开始, 到end位置结束(但不包含end位置).
// 方式二
import _ from 'lodash';
let m = 2; // 二维数组的行数
let n = 4; // 二维数组的列数
let array = _.chunk(_.fill(Array(m * n), 0), n);
console.log(array); // [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]

更新-#20191230

查阅博客发现可以利用 es6 的 map 等循环函数以及 Array 的 fill() 函数。

// 方式三
let m = 2; // 二维数组的行数
let n = 4; // 二维数组的列数
let array3 = Array(m).fill(0).map(x => Array(n).fill(0));
console.log(array3); // [[0,0,0,0],[0,0,0,0]]

相关阅读