将嵌套数组转换为一维数组

无论是面试中还是实际的开发业务中都会遇到数组包含数组的情况,需要将其转换为一维数组,如下

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

// 我们希望转换成如下一维数组
let flatArr = [1, 2, 3, 4, 5, 6, 7, 8, 9]

下面提供几种解决思路

使用 reduce

let deppArr = [1, 2, [3, 4], 5, 6, [7, [8, 9]]]
function flatArry(arr) {
  return arr.reduce((a, b) => {
    if (Array.isArray(b)) {
      a.push(...flatArry(b))
    } else a.push(b)
    return a
  }, [])
}
console.log(flatArry(deppArr)) //[1,2,3,4,5,6,7,8,9]

直接使用递归

let deppArr = [1, 2, [3, 4], 5, 6, [7, [8, 9]]]
function flatArry(arr) {
  let flat = []
  arr.map(element => {
    if (Array.isArray(element)) {
      flat.push(...flatArry(element))
    } else {
      flat.push(element)
    }
  })
  return flat
}
console.log(flatArry(deppArr)) //[1,2,3,4,5,6,7,8,9]
上次更新: 1/26/2020, 4:24:03 PM