一 数组扁平化有几种方式?

1.1 递归方法

const flattenArray = (arr) => {
  let result = []
  for (let i = 0; i < arr.length; i++) {
    let item = arr[i]
    if (Array.isArray(item)) {
      // 如果当前元素还是数组,递归调用flattenArray
      result = result.concat(flattenArray(item))
    } else {
      // 如果当前元素不是数组,则直接添加到result中
      result.push(item)
    }
  }
  return result
}

let result = flattenArray(arr)
console.log('🚀 ~~- result:', result)

1.2 reduce

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

let result = flattenArray(arr)
console.log('🚀 ~~- result:', result)

1.3 toString方法

  • 全数字才能用
const flattenArray = (arr) => {
  let str = arr.toString()

  let newArr = str.split(',').map((item) => Number(item))
  return newArr
}

let result = flattenArray(arr)
console.log('🚀 ~~- result:', result)

1.4 ES6 flat方法

const flattenArray = (arr) => {
  const newArr = arr.flat(Infinity)
  return newArr
}

let result = flattenArray(arr)
console.log('🚀 ~~- result:', result)

1.5 使用解构

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

let result = flattenArray(arr)
console.log('🚀 ~~- result:', result)