Javasript 算法篇之数组铺平

给定任意一个多维数组,铺平成一维数组,例如:

输入:[1, [2, [3, 4], 5]]
输出:[1, 2, 3, 4, 5]

方法一,ES6 flat

function flatArray (arr) {
  return arr.flat(Infinity)
}

方法二,正则表达式

function flatArray (arr) {
  let reg = /(?<=.+)(\[|\])(?=.+)/g
  let str = JSON.stringify(arr)
  return JSON.parse(str.replace(reg, ''))
}

方法三,循环 + 递归

function flatArray (arr) {
  let res = []
  arr.forEach(item => {
    res = res.concat(Array.isArray(item) ? flatArray(item) : item)
  })
  return res
}

方法四,reduce + 递归(某次面试的时候一开始想用 reduce 实现来着,当时没写出来)

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

方法五,while + 拓展运算符

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

jsperf.com 上的性能对比图如下:

可以看出,性能最好的是方法五,其次是方法一方法二,而方法三和方法四慢了将近 70%

除特殊说明外本人博客均属原创,转载请注明出处:http://blog.johnhan.cn/blog_1111.html
京ICP备19044523号-1