持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
对于数组扁平化,例如将 [1,[2],[3,[4]]] 铺平成 [1,2,3,4],es6里提供了 flat 方法,可以很方便地实现,但是除了这个现成的方法,你还知道怎么去实现这个需求吗?
本篇文章就聊聊我所知道的三种方式,废话不多说,开搞!
正文
我所了解的方式有如下三种
- 递归
- 利用原生方法组合
- 利用正则替换
接下来分别说明
递归
这种方式就是利用递归来实现 逐步分解子数组,最终达到整个数组的扁平化,具体代码如下
const arr = [1,[2],[3,[4]]]
function test(arr) {
const res = []
function recursion(tmp) {
for(let i of tmp) {
if(Array.isArray(i)){
recursion(i)
}else {
res.push(i)
}
}
}
recursion(arr)
return res
}
这种方法的关健点就一个,就是 判断遍历到的元素是否是数组
- 是,那么就利用递归继续进行扫描
- 不是,就把对应的元素放到结果数组里
就是这么简单
利用原生方法组合
这种方法代码如下
const arr = [1,[2],[3,[4]]]
function test(arr) {
return arr.toString().split(',').map(item=>Number(item))
}
这个方式使用三种原生方法的结合
- toString:这是最关键的方法,利用它,我们直接可以得到一个铺平的数组元素的字符串
- split:将得到的字符串进行切割,生成数组
- map:将数组每一项转为数字
利用正则替换
这种方式的代码如下
const arr = [1,[2],[3,[4]]]
function test(arr) {
return JSON.parse(`[${JSON.stringify(arr).replace(/\[|\]/g,'')}]`)
}
这种方式关键点如下
- 利用 JSON.stringify 将数组转为字符串形式
- 利用 replace结合正则,将字符串中的 [ 和 ] 替换为 空字符串
- 在最外层加上 [ 和 ]
- 利用 JSON.parse 将字符串转为数组
结语
不管是在面试还是平常工作中,数组扁平化都是经常会出现的问题,所以我们一定要掌握各种解法,而不是只知道flat方法哦~