zoukankan      html  css  js  c++  java
  • 多维数组转一维数组

    二维数组转一维数组

    利用ES6扩展运算符

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

    利用apply特性,将数组作为参数展开

    var arr = [1,2,[3,4],5,[6,7]];
    console.log([].concat.apply([],arr));
    //结果  
    [1, 2, 3, 4, 5, 6, 7]
    
    

    多维数组转一维数组

    使用ES6新增的flat 和 flatMap方法 【新增时间 2019-9-26】

    ES2018 为数组实例新增了flat 、flatMap 方法,用于将二维 或 多为数组 降维 成一维数组

    flat 方法默认没有参数时只会降维降一层。  可以指定降维的次数

    flat 方法不改变原数组

    var arr = [1,[2,[3]]];
    console.log(arr.flat());
    //结果  [1, 2, Array(1)]

    【注】如果想直接降为一维数组flat参数中填写Infinity  

    var arr = [1,2,3,[4,5,[6,7]],[8,[9,[10,[11,[12,[13,[14,[15]]]]]]]]];
    console.log(arr.flat(Infinity));
    //结果   [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

    flatMap()方法,参数是一个回调函数,类似map方法的使用,数组的每个元素执行一次回调函数,然后对返回的数组执行flat()方法,只降一次维

    var arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, [10, [11, [12, [13, [14, [15]]]]]]]]];
    
    let result = arr.flatMap(item=>{
       if(item instanceof Array){
            return [...item]
        } else{
             return item      
       }
    })
    //结果  [1, 2, 3, 4, 5, Array(2), 8, Array(2)] 【只能降一次维】

    不使用ES6的方法 

    方法一:遍历每一个元素

     1 var arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, [10, [11, [12, [13, [14, [15]]]]]]]]];
     2 var arr2 = [];
     3 function toArr(arr){
     4   if(arr.forEach){
     5       arr.forEach(item=>{
     6           if(item.forEach){
     7               toArr(item)
     8          }else{
     9             arr2.push(item)
    10          }
    11        })          
    12     } else{
    13        arr2.push(arr)    
    14     }
        return arr2
    15 }
       toArr(arr)
       console.log(arr2);

    方法二:扩展运算符

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

    方法三:replace + split

    let arr = [1, [2, [3, [4, 5]]], 6];
    let str = JSON.stringify(arr)
    
    arr = str.replace(/([|])/g,"").split(",")

    方法四:replace + JSON.parse

    let arr = [1, [2, [3, [4, 5]]], 6];
    let str = JSON.stringify(arr);
    
    str = str.replace(/([|])/g,"");
    str = '[' + str + ']';
    
    arr = JSON.parse(str)
  • 相关阅读:
    【C++和C#的区别杂谈】后自增运算符的结算时机
    个人作业——软件工程实践总结&个人技术博客
    Unity常见的三种数据本地持久化方案
    C++的逗号运算符
    米哈游--2020春招实习
    厦门飞鱼科技--2020春招实习
    tap4fun(成都尼必鲁)--2020春招实习
    腾讯IEG--2020春招实习
    吉比特&雷霆游戏--2020春招实习
    Docker 基础知识
  • 原文地址:https://www.cnblogs.com/TreeCTJ/p/10259079.html
Copyright © 2011-2022 走看看