2011-04-19 50 views
1

我有兩個陣列(觸點& contactsSelected)既與以下類型的結構:給定兩個數組 - contacts()和contactsSelected() - 如何匹配這兩個?

{ 
    id: 1, 
    name: bob 
}, 
{ 
    id: 213, 
    name: Rob 
} 

我使用KnockoutJS。如何迭代contacts()和每一行,確定該行的ID是否包含在contactsSelected數組中?在KnockoutJS我有這樣的事情:

userCardModel.contactsToShow = ko.dependentObservable(function() {  

     return ko.utils.arrayFilter(this.contacts(), function(contact) { 
      return /////////////// LOGIC GOES HERE TO See if this contact.id() is contained in the contactsSelected() array 
     }); 


}, userCardModel); 

感謝

回答

1

添加 「contactsSelected」 的ID作爲一個對象的屬性因此可以使用「in」運算符或「hasOwnProperty」方法以優於線性的時間訪問它們:

var getSelectedIds = function(sel) { 
    var len=sel.length, o={}, i; 
    for (i=0; i<len; i++) { 
    o[sel[i].id] = true; 
    } 
    return o; 
}; 
var selectedIds = getSelectedIds(contactsSelected); 
(1 in selectedIds); // => true 
(2 in selectedIds); // => false 
selectedIds.hasOwnProperty(213); // => true 
selectedIds.hasOwnProperty(214); // => false 
2

OK,你可以做到這一點是這樣的...

var contactsSelectedLength = contacts.length; 

for (var i = 0, contactsLength = contacts.length; i++) { 
    var contact = contacts[i]; 
    for (var j = 0; j < contactsSelectedLength; j++) { 
     var selectedContact = contactsSelected[j]; 
     if (contact.id == selectedContact.id) { 
      // It is in there! 
     } 
    } 
}