• JS 数组扁平化


    数组扁平化就是将一个多维数组转换为一个一维数组

    [1,[2,[3,4,5]]] ==> [1,2,3,4,5]

    1、递归实现

    普通的递归思路很容易理解,就是通过循环递归的方式,一项一项地去遍历,如果每一项还是一个数组,那么就继续往下遍历,利用递归程序的方法,来实现数组的每一项的连接。

    let arr = [1, [2, [3, 4, 5]]];
    function flatten(arr) {
      let result = [];
    
      for(let i = 0; i < arr.length; i++) {
        if(Array.isArray(arr[i])) {
          result = result.concat(flatten(arr[i]));
        } else {
          result.push(arr[i]);
        }
      }
      return result;
    }
    console.log(flatten(arr));  //  [1, 2, 3, 4,5]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2、reduce 函数迭代

    从上面普通的递归函数中可以看出,其实就是对数组的每一项进行处理,那么其实也可以用reduce 来实现数组的拼接,从而简化第一种方法的代码,改造后的代码如下所示:

    let arr = [1, [2, [3, 4]]];
    function flatten(arr) {
        return arr.reduce(function(prev, next){
            return prev.concat(Array.isArray(next) ? flatten(next) : next)
        }, [])
    }
    console.log(flatten(arr));//  [1, 2, 3, 4,5]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3、split 和 toString

    可以通过 split 和 toString 两个方法来共同实现数组扁平化,由于数组会默认带一个 toString 的方法,所以可以把数组直接转换成逗号分隔的字符串,然后再用 split 方法把字符串重新转换为数组,如下面的代码所示:

    var arr = [1, [2, [3, 4, 5]]];
    
    function flatten(arr) {
        arr = arr.toString().split(',');
        var newArr = arr.map((item) => {
            item = +item
            return item
        })
        return newArr
    }
    
    console.log(flatten(arr)); //  [1, 2, 3, 4, 5]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    4、通过扩展运算符实现

    这个方法的实现,采用了扩展运算符和 some 的方法,两者共同使用,达到数组扁平化的目的:

    let arr = [1, [2, [3, 4]]];
    function flatten(arr) {
        while (arr.some(item => Array.isArray(item))) {
            arr = [].concat(...arr);
        }
        return arr;
    }
    console.log(flatten(arr)); //  [1, 2, 3, 4,5]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5、ES6 中的 flat

    我们还可以直接调用 ES6 中的 flat 方法来实现数组扁平化。flat 方法的语法:arr.flat ( [depth] )
    其中 depth 是 flat 的参数,depth 是可以传递数组的展开深度(默认不填、数值是 1),即展开一层数组。如果层数不确定,参数可以传进 Infinity,代表不论多少层都要展开:

    let arr = [1, [2, [3, 4]]];
    function flatten(arr) {
      return arr.flat(Infinity);
    }
    console.log(flatten(arr)); //  [1, 2, 3, 4,5]
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    OPC UA协议基础
    通过随机平滑验证对抗鲁棒性
    【最新鸿蒙应开发】——HarmonyOS沙箱目录
    可靠的可视化监控平台应用在那些场景?
    读书笔记:程序员的思维修炼:开发认知潜能的九堂课
    项目启动报错提示包有冲突 ReflectionUtils$MethodFilter
    轨道交通工业控制系统信息安全:分析与展望
    【计算机视觉 | 语义分割】语义分割常用数据集及其介绍(七)
    c++新年好和通信路线(acwing)
    centos7中mysql5.7.32服务离线升级到5.7.39教程
  • 原文地址:https://blog.csdn.net/qq_40137978/article/details/126779627