数组扁平化整理

82 阅读1分钟
  1. 使用es6 api
const a = [1, [2, [3, [4, 5]]], 6]
const b =[['a','b'],['c','d'],['e','f']]

const a1 = a.flat() // 结构深度默认 1
const a2 = a.flat(1)
const a3 = a.flat(2)
const a4 = a.flat(3)
const a5 = a.flat(Infinity) // 直接展开任意深度

console.log('a1', a1)
console.log('a2', a2)
console.log('a3', a3)
console.log('a4', a4)
console.log('a5', a5)

// 封装成函数
function flatten(params) {
    return params.flat(Infinity)
}
console.log(flatten(a));
  1. toString 限制 数字
const a = [1, [2, [3, [4, 5]]], 6]
function flatten(arr) {
  return arr.toString().split(',').map(item =>parseFloat(item))
}
console.log(flatten(a));


console.log(a.toString())  //'1,2,3,4,5,6'  string
console.log(a.toString().split(','))  //以“,”进行分割 ['1', '2', '3', '4', '5', '6']
console.log(a.toString().split(',').map(item => parseInt(item))) // 转换成数字
  1. for循环+ 递归
const x =[1,[2,[3,[4]]]]
function flatten(arr){
  let res = []
  for(let i =0;i<arr.length;i++){
      if(Array.isArray(arr[i])){
        //   console.log(arr[i])
        //   console.log(...flatten(arr[i]),`${i}`) 
          res.push(...flatten(arr[i]))
      }else{
      res.push(arr[i])
      }
  }
  return res
}
console.log(flatten(x)) 

  1. reduce api 递归 concat
const a = [1, [2, [3, [4, 5]]], 6]
function flatten(arr){
   return arr.reduce((pre,cur)=>{return  pre.concat( Array.isArray(cur)? flatten(cur): cur)},[])
}

console.log(flatten(a))