数组扁平化

408 阅读1分钟

flat

我们知道原生的 flat 可以支持扁平的维度,所以我们先实现数组扁平,再添加维度功能

function flat(arr){
    return arr.reduce((pre,cur)=>{
        if(Array.isArray(cur)){
            return [...pre,...flat(cur)]
        }else{
            return [...pre,cur]
        }
    },[])
}
flat([1,[2,[3]]])

一开始我忘记对 pre 和递归的结果进行扩展,得到了错误的结果

每次的累计器,也就是 pre,是一个处理后的数组,必须将其进行扩展,才能放入数组中

递归的结果是一个处理好的数组,扩展原因同上

接下来添加维度的功能

function flat(arr,depth=1){
    if(!depth) return arr
    return arr.reduce((pre,cur)=>{
        if(Array.isArray(cur)){
            return [...pre,...flat(cur,depth-1)]
        }else{
            return [...pre,cur]
        }
    },[])
}
flat([1,[2,[3]]],2)

这里使用到了函数的默认参数,让其默认展开一维