• 数组的扁平化处理方法


    在数组的操作中经常会遇到数组嵌套数组的情况,而我们常常需要的是单层数组。

    也就是[1,2,[3,4,[5,[6,[7]]]]] ===》[ 1, 2, 3, 4, 5, 6, 7 ] ,我们称之为数组的扁平化处理。

    方法一

    如果是纯数字的数组(试了一下字符串的也可以)可以利用简单的toString和split方法

    var arr = [1,'a',[3,'4',['b',[6,[7]]]]]
    console.log(arr.toString().split(','))
    //[ '1', 'a', '3', '4', 'b', '6', '7' ]

    方法二

    使用递归方法,如果元素还是数组则继续调用

    var arr = [1,'a',[3,'4',['b',[6,[7]]]]];
    
    function flatten(arr) {
      let res = [];
      for (let i=0,len=arr.length;i<len;i++) {
        if(Array.isArray(arr[i])) {
          res = res.concat(flatten(arr[i]));
        }else{
          res.push(arr[i])
        }
      }
      return res;
    }
    console.log(flatten(arr))
    //[ 1, 'a', 3, '4', 'b', 6, 7 ]

    上面代码可以通过array的reduce方法来实现简化

    var arr = [[1,[2]],'a',[3,'4',['b',[6,[7]]]]]
    
    function flatten(arr) {
      return arr.reduce((prev,item) => {
        return prev.concat(Array.isArray(item)?flatten(item):item);
      }, []);
    }
    console.log(flatten(arr))
    //[ 1, 2, 'a', 3, '4', 'b', 6, 7 ]

    reduce方法和reduceRight方法都会迭代数组所有项,然后构建一个最终返回值。第一个方法正向遍历,第二个反向遍历。

    都接受两个参数,第一个是每一项要执行的函数,第二个是可选参数作为归并基础的初始值。函数接收4个参数:前一个值、当前值、项的索引、数组对象。

    再化简

    var arr = [[1,[2]],'a',[3,'4',['b',[6,[7]]]]];
    const Flat6 = arr => arr.reduce((a, b) => a.concat(Array.isArray(b) ? Flat6(b) : b), []); 
    console.log(Flat6(arr))
    //[ 1, 2, 'a', 3, '4', 'b', 6, 7 ]

    方法三

    如果确定是简单的双层嵌套数组可以使用es6提供的扩展运算符

    var arr = [[1,2],[3],[4,5,6]]
    console.log([].concat(...arr))
    //[ 1, 2, 3, 4, 5, 6 ]

    发现还有更好的方法了再添加吧~~~

  • 相关阅读:
    ASP.NET中的参数与特殊类型和特性
    ASP.NET MVC概述及第一个MVC程序
    ASP.NET系统对象
    WCF学习——WCF简介(三)
    WCF学习——构建一个简单的WCF应用(二)
    WCF学习——构建一个简单的WCF应用(一)
    注入技术--修改pe文件导入表进行注入
    内存
    I/O
    进程
  • 原文地址:https://www.cnblogs.com/xguoz/p/8955380.html
Copyright © 2020-2023  润新知