[JS] Flatten array

拍平数组,这个在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,拼接就行了。

你可能感兴趣的:(JavaScript,Algorithm,算法,javascript)