[JS] Flatten array

喜夏-厌秋 提交于 2019-12-24 05:05:52

拍平数组,这个在lodash里也是很常见的方法,那自己实现一个看看:

普通拍平:
const flatten = arr => [].concat(...arr.map(v => (Array.isArray(v) ? v : [v])));

测试

flatten([1, [2], [[3], 4], 5]); // [1, 2, [3], 4, 5]

逻辑很简单,如果元素是数组的话,那就直接返回,否则就包装成数组,再去整体spread。

深度拍平:
const deepFlatten = arr => [].concat(...arr.map(v => (Array.isArray(v) ? deepFlatten(v) : v)));

测试:

deepFlatten([1, [2], [[3], 4], 5]); // [1, 2, 3, 4, 5]

这个深度拍平比上面那个有意思,如果是数组,那就继续拍平,否则直接返回spread,拼接就行了。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!