让前端飞Web前端之路前端杂记

使用迭代的方式实现flatten函数

2019-05-17  本文已影响10人  会飞小超人

写一个flatten函数,实现扁平化数组的效果。比如:

let arr = [1, 2, [3, 4, 5, [6, 7], 8], 9, 10, [11, [12, 13]]]
得到 flatten(arr)=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

常规版

function flatten(arr) {
  let newArr = []
  function flat(arry) {
    for (let item of arry) {
      if (Array.isArray(item)) {
        flat(item)
      } else {
        newArr.push(item)
      }
    }
  }
  flat(arr)
  return newArr
}

高级版

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

更高级版

const flatten = arr => arr.reduce((pre, cur) => Array.isArray(cur) ? [...pre, ...flatten(cur)] : [...pre, cur], [])
上一篇 下一篇

猜你喜欢

热点阅读