前端手写(八)——数组的扁平化

x33g5p2x  于2022-03-31 转载在 其他  
字(0.9k)|赞(0)|评价(0)|浏览(347)

一、写在前面
数组的扁平化一直都是面试中经常出现的问题,所以今天我们总结一下。
二、具体方法
2.1、采用flat

const arr = [1, [2, [3, [4, 5]]], 6];

const res = arr.flat(Infinity)
console.log(res)

flat中如果不传入任何参数的话,此时默认值为1,此时则表明扁平化的层数为一层。我们传入Infinity,则表示正无穷。
2.2、正则表达式

const arr = [1, [2, [3, [4, 5]]], 6];

let res = JSON.stringify(arr).replace(/\[|\]/g, '').split(',').map(item => item * 1)
console.log(res) //[1,2,3,4,5,6]

2.3、正则表达式改良

const arr = [1, [2, [3, [4, 5]]], 6];

let res = JSON.parse('[' + JSON.stringify(arr).replace(/\[|\]/g, '') + ']')
console.log(res) //[1,2,3,4,5,6]

2.4、使用reduce来解决

const arr = [1, [2, [3, [4, 5]]], 6];

function flatArray(array) {
  return array.reduce((pre, next) => {
    return pre.concat(Array.isArray(next) ? flatArray(next) : next)
  }, [])
}
let res = flatArray(arr)
console.log(res) //[1,2,3,4,5,6]

2.5、使用递归

const arr = [1, [2, [3, [4, 5]]], 6];

function func(array) {
  let newArr = []
  const rec = (arr) => {
    arr.forEach(item => {
      if (!Array.isArray(item)) {
        newArr.push(item)
      } else {
        rec(item)
      }
    })
  }
  rec(array)
  return newArr
}
let res = func(arr)
console.log(res) //[1,2,3,4,5,6]

相关文章