跳至主要內容

数组扁平化

Mr.He小于 1 分钟

数组扁平化

直接使用API

let arr = [1, [2, [3, 4, 5]]];

arr.flat(2) // [1,2,3,4,5]

递归遍历

let arr = [1, [2, [3, 4, 5]]];

function flatten(arr){
  const result = []
  for(const item of arr){
    if(Array.isArray(item)){
      result.push(...flatten(item))
    }else{
      result.push(item)
    }
  }
  return result
}

flatten(arr)

reduce递归

let arr = [1, [2, [3, 4, 5]]];

function flatten(arr){
  return arr.reduce((pre, cur) => {
    return pre.concat(Array.isArray(cur) ? flatten(cur) : cur)
  }, [])
}

flatten(arr)

扩展运算符多次调用

let arr = [1, [2, [3, 4, 5]]];

function flatten(arr){
  while(arr.some(item => Array.isArray(item))){
    arr = [].concat(...arr)
  }
  return arr
}

flatten(arr)

字符串化再分割

let arr = [1, [2, [3, 4]]];

function flatten(arr) {
    return arr.toString().split(',').map(item => Number(item))
}
console.log(flatten(arr)); //  [1, 2, 3, 4,5]