JavaScript 数组扁平化

89 阅读1分钟

含义:是将一个嵌套多维的数组,转化为只有一层的数组。

1. 递归实现

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

function flatten(arr) {
  let res = []
  for(let i = 0; i < arr.length; i++) {
    if(Array.isArray(arr[i])) {
      res = res.concat(flatten(arr[i]))
    } else {
      res.push(arr[i])
    }
  }
  return res
}

const newArr = flatten(arr)
console.log(newArr)  // [1, 2, 3, 4, 5]

2. reduce 函数迭代

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

function flatten(arr) {
  return arr.reduce((prev, item) => {
    return prev.concat(Array.isArray(item) ? flatten(item) : item)
  }, [])
}

const newArr = flatten(arr)
console.log(newArr)  // [1, 2, 3, 4, 5]

3. 扩展运算符实现

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

4. 使用 toString 和 split 共同处理

function flatten(arr) {
  return arr.toString().split(',')
}

5. ES6的flat

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

6. 使用JSON和正则

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