前言

最近准备把5月份面试的时候被问到的问题整理一下,本来是想写在面试总结篇里面的,但是有些知识点还是值得我单独写一篇来记录的。于是便有了 XXX面试官:小勾同学来说说XXX 系列文章。这个系列文章涉及的内容含有本人经历的面试笔试题,也有网上看的面经,觉得可以深挖的问题,便记录了下来。

正文

  1. 什么是数组扁平化处理?

    数组扁平化就是将一个复杂类型数组,可能是多维数组,也可能是一维数组又嵌套了数组,如:[1,3,[14,2,3,[13,5,67,7]]] ,把他转化为 [1,3,14,2,3,13,5,67,7] 格式的便是数组扁平化处理。

  2. 方法一:

    可以使用ES2019推出的 Array.prototype.flat() 方法直接对数组进行扁平化,这个方法接收一个参数,表示扁平化几层,可以设为 Infinity 表示无论多少维,最后都转化为一维。这个方法不会改变原数组,返回的是一个新数组

    function flat(arr){
        return arr.flat(Infinity) // [12, 3, 3, 231, 23231]
    }
  3. 方法二:

    我们知道,在js里面数组无论是多少维,调用 toSting() 最后都是 1,3,5,3 这种类型,所以我们可以通过使用toSting() 方法和 split()方法来实现扁平化。

    function flat(arr){
        return arr.toString().split(",").map(item=>Number(item))
    }
  4. 方法三:

    使用reduce和递归,通过reduce遍历数组,判断当前是否为数组,不是数组就添加到result内,是数组就递归

    function flat(arr){
        return arr.reduce((result,current)=>{
            return result.concat(Array.isArray(current)?flat(current):current)
        },[])
    }
  5. 方法四:

    这种方法就是使用扩展运算符来扁平化 [].concat(...[1, 2, 3, [4, 5]]); // [1, 2, 3, 4, 5]

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

总结

在大厂笔试和面试的时候或者是看别人的面经的时候,我已经遇到遇到很多次了,于是便详细得整理一下。

最后更新: 2020年09月21日 15:46

原始链接: http://www.kweku.top/2020/07/07/06.数组扁平化/