js 快速创建二维数组并初始化
# 前言
笔者喜欢用 js 写 leetcode 偶尔需要初始化二维数组,后来找了一些有效的方式,但是踩了一些坑,遂记录一下相关实践。
结果前置,后面篇幅讲述详情:
- 初始化一维数组
const arr = new Array(n).fill(0);
1
- 初始化二维数组
const arr = Array.from({ length: n }, () => new Array(m).fill(0))
1
或者
const arr = new Array(n).fill(0).map(() => new Array(m).fill(0));
1
# 二维数组
# 涉及API
首先介绍几个 API:
new Array(num: number)
Array 类的构造函数,可以创建一个长度为 n 的
稀疏数组
,元素全部为 undefined。Array.prototype.fill(value: any)
将 value 填充至数组。重点,当 value 是对象时,数组的每一项都会引用该元素。
Array.from(arrayLike)
将
可迭代
对象和类数组
对象,转为数组
# 一维数组
通过上文提到的API,就可以很方便的构造一个一维数组并初始化了,常用方法:
const arr = new Array(n).fill(0);
1
const arr = Array.from({ length: n }, () => 0);
1
# 二维数组
初始化二维数组的思想主要是在一维数组的基础上,进行嵌套,然后填充元素。
里面有个比较坑的点是 fill()
方法,它的元素引用的是同一个对象,所以要杜绝以下写法。
const arr = new Array(n).fill(new Array(m).fill(0)); // 错误示范
// 如果尝试给某个元素赋值,就会影响到其它行的元素
arr[0][0] = 1; // 此时 [i][0] 此列均为 1
1
2
3
2
3
还有另外一个坑,是采用 map()
方法时,map()
会过滤空元素。要知道我们 new Array(n)
出来的数组是稀疏数组
。
const arr = new Array(n).map(() => new Array(m).fill(0)); // 错误示范
console.log(arr);// n 个空元素
1
2
2
因此创建二维数组,可以采用以下两种方法:
- 填充
稀疏数组
后,再使用map()
const arr = new Array(n).fill(0).map(() => new Array(m).fill(0));
1
- 采用
Array.from()
方法
const arr = Array.from({ length: n }, () => new Array(m).fill(0))
1
# 相关链接
编辑 (opens new window)
上次更新: 2024/10/29, 18:28:24