2013-02-01 65 views
9

我想將兩個數組連接成一個。我發現兩個職能可以完成這項工作;一個是jQuery.merge(),另一個是內置函數concat()的JavaScript。他們似乎做同樣的事情,我發現this。它說:「合併創建了一個更小的空間,因爲它循環遍歷原始數組並添加了新項目.Concat是一個內置的Javascript函數,速度應該更快,但佔用的空間更大。」我不確定這種說法是否屬實,還有其他分歧嗎?jQuery.merge()和JavaScript本地函數concat()有什麼區別?

+1

一個區別是$ .merge()函數具有破壞性。它改變了第一個參數來添加第二個參數。 concat()不。它使一個新的陣列。 – j08691

回答

10

該引用是正確的,兩個函數實際上並沒有做同樣的事情,一個將兩個數組合併成一個(第一個參數),第二個從兩個數組構建一個新的數組。

它所指的「腳印」是任何時候將使用的最大內存量。因爲合併,只會複製第二個數組,所以它應該使用較少的內存,因爲在任何時候,它只需要在內存中有兩個數組。

內置函數需要有3個數組,而新數組必須是兩個正在連接的數組的大小。

假設在陣列A和B 1000層的元件,並且合併後的數組作爲C:

  • 合併將需要1000 + 1000 [A-> C],和1000並[b]或3000斑點。
  • Concat將需要1000 + 1000 [c]和1000 [a]和1000 [b]或4000點。

如果有很多內存在使用中,內存減少可能會更快,移動速度也會更快。

Some tests I found

+0

http://jsperf.com/arrays-jquery-merge-vs-concat –

1

在tmaster的情況下,他用jQuery.merge()合併2 arrays.Actually,JQuery.merge可用於合併jQuery對象(jQuery對象具有長度支撐太)與Array.Here是jQuery的.merge()的代碼:

merge: function(first, second) { 
    var len = +second.length, 
     j = 0, 
     i = first.length; 

    for (; j < len; j++) { 
     first[ i++ ] = second[ j ]; 
    } 

    first.length = i; 

    return first; 
}, 

所以對於JQuery的對象具有length屬性,它可以使用合併到第二jQuery對象ATTR複製像0,1到第一jQuery對象。這裏是一個例子:

pushStack: function(elems) { 

    // Build a new jQuery matched element set 
    var ret = jQuery.merge(this.constructor(), elems); 

    ... 

    return ret; 
}, 

this.constructor()返回一個jQuery對象,也是elems。但是concat不能,只能和Array一起使用。這是concat和JQuery.merge之間的差異。

+0

我想你可以連接類似數組的元素... – deostroll

相關問題