说明
近期遇到了需要创建二维数组的需求,但是当时在各个博客找到的都是使用嵌套循环创建二维数组,个人不喜,恰巧项目内使用了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]]