数组降维--打散多维数组--扁平化多维数组

问题?

怎么把 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

 

 

  

posted @ 2017-04-03 00:39  leaf+  阅读(4874)  评论(0编辑  收藏  举报