我有两个具有以下结构类型的数组(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);


谢谢

最佳答案

添加“ 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

10-07 18:52