在写LeetCode的时候有时会遇到创建二维数组,这里总结了初始化二维数组的几种方法
错误写法
const arr = new Array(2).fill(new Array(2).fill(0)); // [ [ 0, 0 ], [ 0, 0 ] ]
arr[0][0] = 1; // 错误 [ [ 1, 0 ], [ 1, 0 ] ]
这种写法当重新赋值一个元素的时候会改变一列的元素
正确写法
- fill + map
const arr = new Array(2).fill(0).map(() => new Array(2).fill(0));
arr[0][0] = 1; // 正确 [ [ 1, 0 ], [ 1, 0 ] ]
先创建一个一维数组,然后对数组的每一个元素使用map再返回一个一维数组
- Array.from + fill
const arr = Array.from(Array(2), () => Array(2).fill(0));
arr[0][0] = 1; // 正确 [ [ 1, 0 ], [ 0, 0 ] ]
Array.from 第一个参数传入一个伪数组对象,第二个参数传入新数组中每个元素都会执行的回调函数
- for循环遍历
// 一层for创建
const arr = new Array(2);
for (let i = 0; i < arr.length; i++) {
arr[i] = new Array(2).fill(0);
}
// 两层for创建
const arr = new Array();
for (let i = 0; i < 2; i++) {
arr[i] = new Array();
for (let j = 0; j < 2; j++) {
arr[i][j] = 0;
}
}