2014-06-11 82 views
0

我想比較jquery中的兩個數組並返回一個不匹配的所有元素的新數組。所以,如果我建立一個功能,像這樣:比較jquery中的數組並返回不同的值

function (parent, child) {}

我應該比較childparent和返回兒童的所有元素不匹配父的一個新的數組。一個例子是

parent = ['apple', 'banana']; 
child = ['fruit']; 

比較孩子的父母回來和數組:['fruit']fruit不在父母。我尋找方法來做到這一點,看到this solution,但我不知道這是否是我想要的。

+0

要執行被稱爲「陣列的區別」,看看它,你會發現許多實現 –

回答

2

你可能想看看Underscore.js(http://underscorejs.org/#difference),它有一個功能。它從數組中返回其他數組中不存在的值。

_.difference([1, 2, 3, 4, 5], [5, 2, 10]); 
=> [1, 3, 4] 

要證明使用另一個庫:你可能會發現噸的其他有用的工具有;)

+0

我實際使用下劃線JS,因爲我的操作我正在使用主幹。我從來沒有想過要去那裏看。謝謝 – user3379926

+0

@ user3379926我並不認爲下劃線差異的表現非常糟糕,它只是一個**小**,比簡單的jQuery解決方案'diff = $(child).not(parent).get()'更好。與查找解決方案(我所做的)相比效率低得多。這裏是測試http://jsperf.com/lookup-vs-not2(第一個是查找解決方案,第二個是jQuery解決方案,而最後一個是下劃線解決方案)。 –

1

要小心,使用關鍵字「父」可能會有意想不到的副作用。在我使用的Chrome版本中,它似乎指的是Window。

香草JavaScript解決方案,方便快捷:

var findDifference = function (elder, sibling) { 

    var difference = []; 

    for(var i = 0; i < sibling.length; i++){ 
    if(elder.indexOf(sibling[i]) < 0){ 
     difference.push(sibling[i]); 
    } 
    } 
    return difference; 
}; 


var elder = ['apple', 'banana']; 
var sibling = ['fruit']; 

findDifference(elder, sibling); // => ['fruit'] 
+1

至少這比使用'_difference'和使用'.not()'的jquery方法更好,但是它仍然不像查找那樣快,請參閱此測試http://jsperf.com/lookup-vs-不是2/2。當父母的大小有幾個項目時,它就快。 –

+1

@KingKing,很棒的jsperf。在規模上,indexOf將表現不佳,因爲它必須爲每個查找進行數組遍歷。 JavaScript對象基於哈希表,因此可以在不斷的時間內進行查找。正如你所提到的那樣,對於小型陣列來說,兩者都可以,但是查找方法是最好的,就像你演示的那樣。 – LexJacobs

相關問題