zoukankan      html  css  js  c++  java
  • 数组降维--打散多维数组--扁平化多维数组

    问题?

    怎么把 arr = [[1,3,4,5],[2,3,5]];变为一维呢?比如:arr = [1,3,4,5,2,3,5];

    那如果更多维度的呢?比如:arr=[2,3,3,4,[2,3,4,[13,3,[3,4,6],4]]];;

    方案一:递归试试

    arr=[[1,3,4,5],[2,3,5]];
        var arr1=[];
        function addNum(e){
    	e.forEach(function(e){
    		if(typeof(e)!="number"){
    			e.forEach(function(e){
    				addNum(e);
    			})
    		}else{
    			arr1.push(e);
    		}	
    		})
    		
    	}
         arr.forEach(function(e){
    	addNum(e);
         });
    console.log(arr1);   

    简单的维度还可以,但是数组维度变得很多的情况下,递归不见得很好用啊?

    方案二:数组的特殊处理

    arr=[2,3,3,4,[2,3,4,[13,3,[3,4,6],4]]];
    arr=""+arr;            //这里对数组进行处理
    console.log(arr);      //2,3,3,4,2,3,4,13,3,3,4,6,4   //string
    arr=arr.split(",");    
    console.log(arr);      //["2", "3", "3", "4", "2", "3", "4", "13", "3", "3", "4", "6", "4"]  //array
    var arr1=[];
    for(var i=0;i<arr.length;i++){
       arr1[i]=eval(arr[i]);
    }
    console.log(arr1);     //[2, 3, 3, 4, 2, 3, 4, 13, 3, 3, 4, 6, 4]; 

    即使处理更高维度的数组也是可以的。

    方法二巧妙的利用数组与字符串的隐式转换,再利用字符串的方法,字符串分割成字符串数组,最后再转成数值型数组。为什么呢?请看下面。。。

    试试toString()

      该函数的作用是讲对象以字符串的形式返回,该方法属于Object对象,由于所有的对象都"继承"了Object的对象实例,因此几乎所有的实例对象都可以使用该方法。

    那我们想,数组也是对象,我们是否可以用该函数把数组以字符串的形式输出?

    事实上, Js的许多内置对象都重写了该函数,以实现更适合自身的功能需要。例如Array:

    '将 Array 的每个元素转换为字符串,并将它们依次连接起来,两个元素之间用英文逗号作为分隔符进行拼接。'

     所以我们看看:

    然后我们再用上面的方案二将字符串转换成数组,大功告成!

    回过头来看看方法二,为什么在数组前面增加“+”就能把数组转换成字符串呢?

    因为在需要将对象转换成字符串的时候,javascript就会调用toString()这个方法。比如,使用“+”运算符链接一个字符串或者一个对象或者在希望使用字符串的方法中使用对象时候都会调用toString().

    巧用“+”

    将是数字类型的字符串转成数值

    +“123” //123

      

  • 相关阅读:
    表达式求值
    火柴排队(归并)
    POJ 3254 压缩状态DP
    ZOJ 3471 压缩状态DP
    Boost IPC Persistence Of Interprocess Mechanisms 例子
    TCO 2014 Round 1A
    Google Code Jam 2014 Qualification 题解
    STL set_difference set_intersection set_union 操作
    b_zj_特征提取(map记录上一个特征运动的次数)
    b_zj_最大连续的相同字符子串的长度(双指针+找突破点)
  • 原文地址:https://www.cnblogs.com/leaf930814/p/6660378.html
Copyright © 2011-2022 走看看