对于数组扁平化,例如将 [1,[2],[3,[4]]] 铺平成 [1,2,3,4],es6里提供了 flat 方法,可以很方便地实现,但是除了这个现成的方法,你还知道怎么去实现这个需求吗?

666.jpg

本篇文章就聊聊我所知道的三种方式,废话不多说,开搞!

ppx2.jpg

正文

我所了解的方式有如下三种

接下来分别说明

qidai.jpeg

递归

这种方式就是利用递归来实现 逐步分解子数组,最终达到整个数组的扁平化,具体代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
}

这种方法的关健点就一个,就是 判断遍历到的元素是否是数组

就是这么简单

6662.jpg

利用原生方法组合

这种方法代码如下

1
2
3
4
5
const arr = [1,[2],[3,[4]]]

function test(arr) {
return arr.toString().split(',').map(item=>Number(item))
}

这个方式使用三种原生方法的结合

利用正则替换

这种方式的代码如下

1
2
3
4
5
const arr = [1,[2],[3,[4]]]

function test(arr) {
return JSON.parse(`[${JSON.stringify(arr).replace(/\[|\]/g,'')}]`)
}

这种方式关键点如下

结语

不管是在面试还是平常工作中,数组扁平化都是经常会出现的问题,所以我们一定要掌握各种解法,而不是只知道flat方法哦~