第一个可观察数组:
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的库。