对于数组扁平化,例如将 [1,[2],[3,[4]]]
铺平成 [1,2,3,4]
,es6里提供了 flat 方法,可以很方便地实现,但是除了这个现成的方法,你还知道怎么去实现这个需求吗?
本篇文章就聊聊我所知道的三种方式,废话不多说,开搞!
正文
我所了解的方式有如下三种
- 递归
- 利用原生方法组合
- 利用正则替换
接下来分别说明
递归
这种方式就是利用递归来实现 逐步分解子数组,最终达到整个数组的扁平化,具体代码如下
1 | const arr = [1,[2],[3,[4]]] |
这种方法的关健点就一个,就是 判断遍历到的元素是否是数组
- 是,那么就利用递归继续进行扫描
- 不是,就把对应的元素放到结果数组里
就是这么简单
利用原生方法组合
这种方法代码如下
1 | const arr = [1,[2],[3,[4]]] |
这个方式使用三种原生方法的结合
- toString:这是最关键的方法,利用它,我们直接可以得到一个铺平的数组元素的字符串
- split:将得到的字符串进行切割,生成数组
- map:将数组每一项转为数字
利用正则替换
这种方式的代码如下
1 | const arr = [1,[2],[3,[4]]] |
这种方式关键点如下
- 利用 JSON.stringify 将数组转为字符串形式
- 利用 replace结合正则,将字符串中的 [ 和 ] 替换为 空字符串
- 在最外层加上 [ 和 ]
- 利用 JSON.parse 将字符串转为数组
结语
不管是在面试还是平常工作中,数组扁平化都是经常会出现的问题,所以我们一定要掌握各种解法,而不是只知道flat方法哦~