比较knockout可观察数组,并从数组中删除任何具有match id的对象



第一个可观察数组:

data = [{id:1 , name:'abc'},{id:2 ,name:'xyz'},{id:3 , name:'rst'}]

另一个数组:

dataProvider = [{id:3 , name:'pqr'} , {id:4 , name:'hjk'}]

现在我们可以将数据数组与数据提供者进行比较,对于id = 3,它应该替换之前的对象,而对于id = 4,它只是将对象推入数据数组。

因此新的数据数组将像这样

data = [{id:1 , name:'abc'},{id:2 ,name:'xyz'} ,{id:3 , name:'pqr'} , {id:4 , name:'hjk'}]   

使用$.each的另一种选择是使用knockout自己的效用函数ko.utils.arrayFilter来实现这一点。我还在对象中缓存了可匹配的id,这样我们就不必为每个数据条目遍历整个数据提供程序。

var matches = {},
    i = 0,
    len = dataprovider.length,
    filteredData = [];
// transform data to prevent looping over array n times where n = data.length
for (; i < len; i++) {
    matches[dataprovider[i].id] = dataprovider[i];
}
filteredData = ko.utils.arrayFilter(self.data(), function(item) {
    return !(item.id in matches); // leave the item out if its in the dataprovider
});
self.data(filteredData.concat(dataprovider)); // merge in all of the dataprovider results

可以,

$.each(self.data(), function() {
    for (var x in dataprovider) {
       if (this.id === x.id)
          this.data = x.data;
       else {
          self.data().push({id: x.id, data: x.data});
       }
    }
});

Knockout.js是一个完全集成jQuery的库。

最新更新