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)
这里使用到了函数的默认参数,让其默认展开一维