咱們在項目過程當中,有時候會遇到須要將兩個數組合併成爲一個的狀況。javascript
好比:java
var a = [1,2,3]; var b = [4,5,6];
有兩個數組a、b,需求是將兩個數組合併成一個。方法以下:數組
一、concatapp
js的Array對象提供了一個叫concat()方法,鏈接兩個或更多的數組,並返回結果。函數
var c = a.concat(b);//c=[1,2,3,4,5,6]
這裏有一個問題,concat方法鏈接a、b兩個數組後,a、b兩個數組的數據不變,同時會返回一個新的數組。這樣當咱們須要進行屢次的數組合並時,會形成很大的內存浪費,因此這個方法確定不是最好的。spa
二、for循環code
大概的思路是:遍歷其中一個數組,把該數組中的全部元素依次添加到另一個數組中。直接上代碼:對象
for(var i in b){ a.push(b[i]); }
這樣的寫法能夠解決第一種方案中對內存的浪費,可是會有另外一個問題:醜!這麼說不是沒有道理,若是能只用一行代碼就搞定,豈不快哉~blog
三、applyip
函數的apply方法有一個特性,那就是func.apply(obj,argv),argv是一個數組。因此咱們能夠利用這點,直接上代碼:
a.push.apply(a,b);
調用a.push這個函數實例的apply方法,同時把,b看成參數傳入,這樣a.push這個方法就會遍歷b數組的全部元素,達到合併的效果。
這裏可能有點繞,咱們能夠把b當作[4,5,6],變成這樣:
a.push.apply(a,[4,5,6]);
而後上面的操做就等同於:
a.push(4,5,6);
這樣就很清楚了!
另外,還要注意兩個小問題:
1)以上3種合併方法並無考慮過a、b兩個數組誰的長度更小。
因此好的作法是預先判斷a、b兩個數組哪一個更大,而後使用大數組合並小數組,這樣就減小了數組元素操做的次數!
2)有時候咱們不但願原數組(a、b)改變,這時就只能使用concat了。