2014-02-07 67 views
0

我有兩個陣列:篩選兩個不同的結構化陣列下劃線JS

array1 = [{Name: 'abc', ID: 23},{Name:'xyz', ID: 10},{Name:'def', ID: 12}]; 
array2 = [10,23]; 

合成陣列應陣列1,其與ID的數組2內容相交的一部分。

這裏的結果是result = [{Name: 'abc', ID: 23},{Name: 'xyz', ID:10}];

任何想法如何使用下劃線js來實現?

+0

您可以發佈您的代碼那麼遠?什麼沒有用?你是怎麼試圖解決這個問題的? – elclanrs

回答

3
_.filter(array1, function(item){ return _.contains(array2, item.ID); }); 

您可以使用filtercontains

試試吧here

+0

還有其他方法嗎?我仍然沒有得到我的結果,它返回空數組。 –

+0

我錯過了一個括號。我添加了一個jsfiddle。它現在有效。 – Adam

1

假設你的ID都是唯一的:

var groupedById = _.indexBy(array1, "ID"); 
var filteredArray = _.map(array2, function (lookupId) { 
    return groupedById[lookupId]; 
}); 
+0

請注意,這將以與您請求的ID列表相同的順序返回項目(即與'array2'指定的順序相同)。如果你更喜歡'array1'中的順序被保留,你將會想要使用基於_.filter的方法。 –