2013-12-08 6 views
1

У меня есть два наблюдаемых массива, которые могут иметь соответствующие элементы. Я бы хотел, чтобы два фильтра эти два массива и найти уникальные предметы. дублирующиеся элементы могут быть сопоставлены атрибуту ID.как взять разницу в двух наблюдаемых массивах?

Есть ли способ сделать это, не создавая вложенные циклы, я обеспокоен тем, какое влияние этот подход оказывает на производительность страницы.

В настоящее время я делаю это следующим образом, если вы знаете лучший способ, пожалуйста, не стесняйтесь делиться.

self.alerts = ko.computed(function() { 
    var duplicates = []; 
    var alerts = ko.mapping.fromJS(ko.toJS(Neptune.SonarAlerts.alerts())); 
    ko.utils.arrayForEach(self.selectedAlerts(), function(selected) { 
     var duplicate = ko.utils.arrayFirst(alerts(), function(item) { 
      return selected.ID() == item.ID(); 
     }); 

     if (duplicate != null) { 
      duplicates.push(duplicate); 
     } 
    }); 

    alerts.removeAll(duplicates); 

    return alerts(); 
}); 
+0

Intersect ? ..... но это все просто петли на каком-то уровне .... –

ответ

0

На каком-то уровне, петли будут реализованы, но если у вас есть underscore.js, вы можете по крайней мере сделать это в функционально с intersection метода:

var matchingItems = _.intersection(array1, array2);

Смежные вопросы