zoukankan      html  css  js  c++  java
  • 实现把多维数组转为一维数组的几种方式

    在开发过程中遇到一个比较ip大小的情况,并且遇到了把二维数组转为一维数组的情况,翻下资料,做下总结。

    方法一:转字符串法

    该例子中,tempArr是一个多维数组,使用join将其转为字符串,在使用split方法转换为一维数组。

    缺点: 如果数组中的各个项是number,将不可避免的转为字符串。

        /** 
         * 使用转字符串法
         */
        let tempArr = [1,[2,3],[4,5,[6,7]]];
        let result_str1 = tempArr.join(',').split(',');
        console.log(result_str1); //  ["1", "2", "3", "4", "5", "6", "7"]

    改进:

    使用了map进行再次遍历。

    这种情况只适用于数组中各个项都是number类型或string类型的情况

        // 可以使用循环改进
        function unid(arr){
            let result_str1 = arr.join(',').split(',');
            let result_number = result_str1.map(item=>{
                return Number(item);
            });
            return result_number;
        }
        console.log(unid(tempArr)); // [1, 2, 3, 4, 5, 6, 7]

    方法二:使用数组的concat方法,以及apply 

    我们知道concat方法参数如果是一个数组,会把一个一维数组转为单个的项和前面的数组链接起来,如果是多维数组,则保留多维数组里面的项。

    看下面这个小例子:

        // 数组的concat方法
      
      let tempArr2 = ['3',4],
      tempArr3 = ['3',4,[5,6]];
      console.log([1,2].concat(tempArr2)); // [1, 2, "3", 4]
      console.log([1,2,].concat(tempArr3)); // [1, 2, "3", 4, [5,6]]

    所以使用concat方法只能把二维数组转为一维数组

        let tempArr4 = [[1,2],'3','4',[5,6],[7]];
        console.log([].concat.apply([],tempArr4)); // [1, 2, "3", "4", 5, 6, 7]

    方法三:使用递归

    可以使用Object.prototype.toString.call()来判断array的类型,也可以使用Array.isArray来判断。

        // 方法三:使用递归来实现多维数组转为一维数组
        let result = [],
            tempArr5 = ['1',2,[3,4,[5,6]],7];
        function unid1(arr){
            for(let item of arr){
                if(Object.prototype.toString.call(item).slice(8, -1)==='Array'){
                    unid1(item);
                }else{
                    result.push(item);
                }
            }
            return result;
        }
        console.log(unid1(tempArr5)); // ["1", 2, 3, 4, 5, 6, 7]

    三种方法有好有坏,还是需要根据实习情况来按需使用。

  • 相关阅读:
    VS插件哪家强?CodeRush v20.2帮你忙
    WinForms界面开发工具DevExpress WinForms v20.2亮点——全新Sankey Diagram控件震撼发布
    java中将信息写入excel
    java中使用IO流将以文件中的内容去取到指定的文件中
    java中使用IO流复制文件
    采购订单写入sap失败后,抛出自定义异常,回滚数据库
    java中将文件夹里面的文件复制到指定的文件夹(java IO)
    JAVA中IO流详解
    获取员工合同信息列表 定时任务
    Java连接MySQL数据库——含步骤和代码
  • 原文地址:https://www.cnblogs.com/chinabin1993/p/9761141.html
Copyright © 2011-2022 走看看