实现一个简易版的数组平铺的函数

211 阅读1分钟

使用reduce

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

使用forEach

let arr = [1, 2, [3, [5, [6], [7, [8]]], [4]]]

  // let num = 0 // 测试执行次数 ,用于测试
  let count = 0 // 记录每次深层维度数组的索引

  function deepFlat (array) {
    array.forEach((item, index) => {
      // 减少不必要的流程
      if (index < count) {
        return
      }
      // num += 1
      // console.log(num)
      if (Array.isArray(item)) {
        count = index + 1
        array.splice(index, 1, ...item)
        deepFlat(array)
      }
    })
    return array
  }

  console.log(deepFlat(arr))  // [1, 2, 3, 5, 6, 7, 8, 4]