2013-01-09 213 views
1

我有兩個類別:骨幹集合 - 如何過濾與其他集合的集合?

  • 收集Amodel1model2model3model4

  • 收集Bmodel2model3

例如:

var model1 = new models.ExModel({id: "1", name: "model1"}); 
var model2 = new models.ExModel({id: "2", name: "model2"}); 
var model3 = new models.ExModel({id: "3", name: "model3"}); 
var model4 = new models.ExModel({id: "4", name: "model4"}); 

var A = new collections.ExCol([ model1, model2, model3, model4 ]); 
var B = new collections.ExCol([ model2, model3 ]); 

我想要得到的是不包含在BA車型的陣列。例如,我想獲得一個數組model1model4。我怎樣才能以最高效的方式做到這一點?

我想過兩個選擇來做到這一點,但我不知道是否是最好的方法來做到這一點。我認爲Option1比Option2更有效率。

選項1:

var idsB = B.pluck("id"); 
var result = A.filter(function(m) { return idsB.indexOf(m.id) === -1; }); 

選項2:

var result = A.filter(function(m) { return !B.contains(m); }); 

完整的示例:http://jsfiddle.net/VH3HU/

謝謝!

回答

2

使用可以使用下劃線方法_.differencehttp://underscorejs.org/#difference

var results = _.difference(A.models, B.models); 
+0

哦謝謝!我喜歡這個選項。我沒有看到這種方法。我希望這是有效的。 – oriolparra

+0

+1。要知道的一個好消息是,只有當模型是兩個集合中的* same * Model實例時,這纔有效。如果它們是兩個不同的實例,即使它們的所有屬性都相同,它也不會。 – jevakallio