javascript - Comparing knockout observable array and removing any object with match id from the array -
1st observable array:
data = [{id:1 , name:'abc'},{id:2 ,name:'xyz'},{id:3 , name:'rst'}]
another array:
dataprovider = [{id:3 , name:'pqr'} , {id:4 , name:'hjk'}]
now can compare data array data provider , id = 3 should replace previous object , id = 4 push object data array.
therefore new data array this
data = [{id:1 , name:'abc'},{id:2 ,name:'xyz'} ,{id:3 , name:'pqr'} , {id:4 , name:'hjk'}]
an alternative using $.each
use knockout's own utility function ko.utils.arrayfilter
achieve this. cached matchable ids in object don't have loop on entire dataprovider each data entry.
var matches = {}, = 0, len = dataprovider.length, filtereddata = []; // transform data prevent looping on array n times n = data.length (; < len; i++) { matches[dataprovider[i].id] = dataprovider[i]; } filtereddata = ko.utils.arrayfilter(self.data(), function(item) { return !(item.id in matches); // leave item out if in dataprovider }); self.data(filtereddata.concat(dataprovider)); // merge in of dataprovider results
Comments
Post a Comment