对于c或java来说,初始化二维数组很简单,但js有些不一样。
1. 错误写法
const arr = new Array(2).fill(new Array(2).fill(0)); // [ [ 0, 0 ], [ 0, 0 ] ]
arr[0][0] = 1; // 错误 [ [ 1, 0 ], [ 1, 0 ] ]
用这种写法,当重新赋值一个元素的时候,会改变一列元素,这和我们的要求不符。
2. 正确写法:fill + map
const arr = new Array(2).fill(0).map(() => new Array(2).fill(0));
arr[0][0] = 1; // 正确 [ [ 1, 0 ], [ 0, 0 ] ]
这种写法比较简洁,先创建一维数组并用fill()
赋值,然后对赋值后的一维数组使用map()
回调遍历数组并返回一维数组,来创建二维数组。
3. 正确写法:for 循环创建
const arr = new Array(2);
for (let i = 0; i < arr.length; i++) {
arr[i] = new Array(2).fill(0);
}
arr[0][0] = 1; // 正确 [ [ 1, 0 ], [ 0, 0 ] ]
这种写法也是先创建一个一维数组,然后遍历数组,赋值数组的每个元素为一维数组并fill(0)
。
4. 正确写法:双重 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;
}
}
arr[0][0] = 1; // 正确 [ [ 1, 0 ], [ 0, 0 ] ]