zoukankan      html  css  js  c++  java
  • 数组拍平

    005: JS中flat---数组扁平化

    对于前端项目开发过程中,偶尔会出现层叠数据结构的数组,我们需要将多层级数组转化为一级数组(即提取嵌套数组元素最终合并为一个数组),使其内容合并且展开。那么该如何去实现呢?

    需求:多维数组=>一维数组

    let ary = [1, [2, [3, [4, 5]]], 6];// -> [1, 2, 3, 4, 5, 6]
    let str = JSON.stringify(ary);
    

    #1. 调用ES6中的flat方法

    ary = arr.flat(Infinity);
    

    #2. replace + split

    ary = str.replace(/([|])/g, '').split(',')
    

    #3. replace + JSON.parse

    str = str.replace(/([|]))/g, '');
    str = '[' + str + ']';
    ary = JSON.parse(str);
    

    #4. 普通递归

    let result = [];
    let fn = function(ary) {
      for(let i = 0; i < ary.length; i++) {
        let item = ary[i];
        if (Array.isArray(ary[i])){
          fn(item);
        } else {
          result.push(item);
        }
      }
    }
    

    #5. 利用reduce函数迭代

    function flatten(ary) {
        return ary.reduce((pre, cur) => {
            return pre.concat(Array.isArray(cur) ? flatten(cur) : cur);
        }, []);
    }
    let ary = [1, 2, [3, 4], [5, [6, 7]]]
    console.log(flatten(ary))
    

    #6:扩展运算符

    //只要有一个元素有数组,那么循环继续
    while (ary.some(Array.isArray())) {
      ary = [].concat(...ary);
    }
    

    这是一个比较实用而且很容易被问到的问题,欢迎大家交流补充。

  • 相关阅读:
    POJ-1035 Spell checker---字符串处理
    hdu-3572 Task Schedule---最大流判断满流+dinic算法
    BZOJ4826: [Hnoi2017]影魔
    BZOJ4825: [Hnoi2017]单旋
    BZOJ3504: [Cqoi2014]危桥
    BZOJ4407: 于神之怒加强版
    BZOJ2818: Gcd
    BZOJ4542: [Hnoi2016]大数
    BZOJ4540: [Hnoi2016]序列
    BZOJ4537: [Hnoi2016]最小公倍数
  • 原文地址:https://www.cnblogs.com/bamboopanders/p/13569768.html
Copyright © 2011-2022 走看看