問題?
怎么把 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