数组扁平化
灵感胜于汗水 Lv5

手写flat(数组扁平化)

1
2
3
4
5
6
7
8
9
10
11
Array.prototype._flat=function (depth=1){
function flatten(arr,depth){
if(depth<=0) return [...arr]
return arr.reduce((pre,cur)=>{
if (Array.isArray(cur)) pre.push(...flatten(cur,depth-1)) //是数组,递归
else pre.push(cur) //不是数组,直接加入pre
return pre
},[])
}
return flatten(this,depth)
}
1
2
3
4
5
const arr=[1,[2,3],[4,[5,6]],7]
console.log(arr._flat()) //[1, 2, 3, 4, [5, 6], 7]
console.log(arr._flat(1)) //[1, 2, 3, 4, [5, 6], 7]
console.log(arr._flat(2)) //[1, 2, 3, 4, 5, 6, 7]
console.log(arr._flat(Infinity)) //[1, 2, 3, 4, 5, 6, 7]

代码简化:

1
2
3
4
5
6
7
8
Array.prototype._flat = function (depth = 1) {
function flatten(arr, depth) {
return depth <= 0 ?
[...arr] : arr.reduce((pre, cur) => Array.isArray(cur) ?
[...pre, ...flatten(cur, depth - 1)] : [...pre, cur], [])
}
return flatten(this, depth)
}

参考视频

  • 本文标题:数组扁平化
  • 本文作者:灵感胜于汗水
  • 创建时间:2022-04-18 15:21:29
  • 本文链接:https://cjhsyc.github.io/2022/04/18/数组扁平化/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!