Flat
flat 是将数组扁平化的一种方法。
比如:我们有一个数组:
let arr = [ [1,2,3], [4,5,6], [6,7, [3,4]] ]
现在需要将数组元素转化成 [ 1, 2, 3, 4, 5, 6, 6, 7, [ 3, 4 ] ]
(浅扁平)或 [ 1, 2, 3, 4, 5, 6, 6, 7, 3, 4]
(深扁平)
- 浅扁平:只能扁平化二级数组
- 深扁平:可以扁平多维数组
浅扁平实现
第一种:自带方法
function myFlat(arr) {
arr = Array.isArray(arr) ? arr : Array.from(arr)
return arr.flat()
}
第二种:reduce 累加
function myFlatReduce(arr) {
return arr.reduce((total, current) => total.concat(current), [])
}
深扁平
第一种:经典递归回调法 (参考第三种 Generator 法)
function myFlatRecursion(arr) {
let result = []
for(const item of arr) {
if (Array.isArray(item)) {
result = result.concat(myFlatRecursion) // concat 合并并返回新数组,不会修改原数组
} else {
result.push(item)
}
}
return result
}
第二种:字符串
// 缺点:扁平化后的每一项都是字符串
function myFlatStr(arr) {
return arr.toString().split(',')
}
第三种:Generator 法
function myFlatGener(arr) {
for (const item of arr) {
if (Array.isArray(item)) {
yield* myFlatGener(item)
} else {
yield item
}
}
}