2019-04-28
描述
按照指定深度展开被多层嵌套的数组。
提示
- 使用递归,每一次递归减少一层嵌套
- 使用
Array.prototype.reduce()
和Array.prototype.concat()
来合并元素或数组 - 基于此,当
depth
等于1
时停止递归 - 第二个参数
depth
可以省略,其默认值为 1,即只展开数组中元素的第一层嵌套
代码
const flatten = (arr, depth = 1) =>
arr.reduce((a, v) => a.concat(depth > 1 && Array.isArray(v) ? flatten(v, depth - 1) : v), []);
示例
展开二维数组:
flatten([1, [2], 3, 4]); // [1, 2, 3, 4]
对数组进行 2 层深度的展开:
flatten([1, [2, [3, [4, 5], 6], 7], 8], 2); // [1, 2, 3, [4, 5], 6, 7, 8]