面试题(js)--数组扁平化

368 阅读2分钟

数组扁平化是js面试题中机考或者是笔试题中常见的考题,下面我为大家整理了几种数组扁平化的方式,望大家参考,如果有其他的方法,大家可以踊跃留言

这里就以三维数组作为示例,当然,这几种方法适用于多维数组,二维数组及以上都是可以的

  • 第一种方法join和split
let arr = [1,2,3,[9,3,4,[5,6,78]]]
let arr1 = arr.join(',').split(',')

function demo() {
    return arr.join(',').split(',').map(item=>{
        return parseInt(item)
    })
}
demo(arr)
  • 第二种方法使用reduce函数,遍历数组中的每一项,若值为数组则接着递归遍历,否则concat,进行连接
let arr2 =  [1,2,3,[9,3,4,[5,6,78]]]
function demo1(arr2) {
  return arr2.reduce((a,b) =>{
      return a.concat(Array.isArray(b) ? demo1(b) : b)
  },[])
}
demo1(arr2)
  • 第三种方法 toString && split
let arr3 = [1,2,3,[9,3,4,[5,6,78]]]
function demo2(arr3) {
    return arr3.toString().split(',').map(item =>{
        return Number(item)
    })
}

demo2(arr3)
  • 第四种方法 使用递归便利每一项,如果是数组的话,就继续递归,否则concat,进行连接
let arr4 = [1,2,3,[9,3,4,[5,6,78]]]

function demo3(arr4) {
  let arr5 = []
    arr4.map(item =>{
        if (Array.isArray(item)){
            arr5 = arr5.concat(demo3(item))
        } else {
            arr5.push(item)
        }
    })
    return arr5
}

demo3(arr4)
  • 第五种方法,扩展运算符
let arr6 = [1,2,3,[9,3,4,[5,6,78]]]
function demo4(arr6) {
  while (arr6.some(item =>Array.isArray(item))){
      arr6 = [].concat(...arr6)
  }
  return arr6
}
demo4(arr6)
  • 第六种方法,flat函数 flat函数默认传参1,Infinity的含义表示无限深度

值为负数的含义对于多维数组并没有实际的含义,所以程序在执行的时候会默认传递参数为1

let a = [1,2,[3,4,[5,6,7]]]
console.log(a.flat(Infinity));    // [1,2,3,4,5,6,7]
  • 这里值得注意的是,flat函数会默认将原数组中的空值删除,演示效果如下
let a = [1,2,,3,4,,6]
console.log(a.flat()); // [1, 2, 3, 4, 6]

这里的打印,啊数组调用flat函数将原数组中的空值删除了

  • 以上几种方法在控制台打印的效果如下

微信截图_20220215173350.png

有什么其他的更为简便的方法,大家可以踊跃在下面留言,作者都会看的哦

极速更新中......