0

第一个可观察数组:

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'}]   
4

2 回答 2

0

是的你可以 :

$.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 完全集成的库。

于 2013-05-21T12:02:00.510 回答
0

使用的替代方法$.each是使用淘汰赛自己的效用函数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
于 2013-05-21T13:16:16.270 回答