数组扁平化
前置知识
浅扁平化
- 浅扁平化就是只扁平化一层数组
深扁平化
- 实现无线层级的多维数组扁平化
方法
原始数组
1 | var needFlatArr = [1, 2, [3, 4], [[5, 6, 7]], [8, [9, 10], [[11]]]] |
浅扁平化实现
concat + apply
1 | // 1.concat + apply - 浅扁平化 |
concat + reduce
1 | // concat + reduce - 浅扁平化 |
深扁平化实现
- 递归实现 - 常规实现 - 深扁平化
1 | function flatRecursion(arr) { |
- 递归实现 es6 - 常规实现 - 深扁平化
1 | function flatRecursionEs6(arr, result = []) { |
- 递归实现 es6 - 简化 - 深扁平化 - 推荐
1 | const flatten = arr => |
- 循环实现 - 循环调用浅扁平化函数实现 - lodash 思路 - 深扁平化
1 | function flatIterationShallowFlat(arr, deep = 1) { |
- toString - 仅支持元素全部为 number 的场景 - 深扁平化
1 | function flatToString(arr) { |
- 字符串过滤 - 将输入数组转换为字符串并删除所有括号([])并将输出解析为数组 - 深扁平化
1 | const flatStringFilter = arr => |
- Generator - 定义生成器函数,并依次调用
1 | function* flatG(arr) { |
- 原生 flat - 兼容有问题 chrome 高版本不支持 - 深扁平化
1 | ;[1, 2, [3]] |
- 原生 flatMap - 等于 map + flat
1 | // 相当于 [[[2]], [[4]], [[6]], [[8]]].flat() |