探討JS合併兩個數組的方法

  咱們在項目過程當中,有時候會遇到須要將兩個數組合併成爲一個的狀況。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了。

相關文章
相關標籤/搜索