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 に答える