2011-04-19 7 views
1

J'ai deux tableaux (contacts & contactsSelected) à la fois avec le type suivant de la structure:Étant donné deux tableaux - contacts() & contactsSelected() - Comment faire correspondre les deux?

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

J'utilise KnockoutJS. Comment puis-je itérer sur les contacts() et pour chaque ligne, déterminer si l'ID de cette ligne est contenue dans le tableau contactsSelected? En KnockoutJS j'ai quelque chose comme ceci:

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); 

Merci

Répondre

1

Ajouter les ID de "contactsSelected" en tant que propriétés d'un objet donc ils peuvent être accédés dans un temps meilleur que linéaire en utilisant l'opérateur "in" ou la méthode "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, vous pouvez le faire comme cela ...

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! 
     } 
    } 
} 
Questions connexes