我得到了以下問題,我正在尋找一個非常有效的方法來做到這一點。js對象之間的差異
我有兩個JavaScript對象總是建立一個像{ID:數據,ID:數據,..}
如果我只看上的按鍵,他們將是這樣的:
B = ["1","2","3"]
A = ["2","3","4"]
現在我需要我需要的信息,將B轉換爲A,因此在這種情況下:刪除B.1和B.4 = A.4。
我在想,也許一個原型函數的對象將是一個很好的方法來做到這一點。
這是我到目前爲止有:
Array.prototype.diff = function(a) {
return this.filter(function(i) {return a.indexOf(i) < 0;});
};
Object.prototype.syncTo = function(b,callbackA,callbackB){
var a = this;
var bKeys = Object.keys(b);
var aKeys = Object.keys(a);
var toremove = bKeys.diff(aKeys);
var toadd = aKeys.diff(bKeys);
for(var i = 0; i < toremove.length; i++) {
if(b.hasOwnProperty(toremove[i])) {
delete b[toremove[i]];
}
}
callbackB(b);
for(var i = 0; i < toadd.length; i++) {
if(a.hasOwnProperty(toadd[i])){
<<Dont know how to go on now>>
}
}
callbackA(XXXXXX);
};
凡CallbackA應該有被添加到B和CallbackB與需要從B.刪除所有元素應該叫所有元素被稱爲
我正在努力與callbackA的元素和一般是否這是一個這樣做的有效方式。
感謝您的支持!
編輯: 的回調的一個一個例子是:
callbackB:
function (items){
for(var i in items){
items[i].removeSomeWhereElse();
}
}
我安裝了涼亭版本: var delta = jsondiffpatch.diff(obj1,obj2); 控制檯。警告(增量); 與 VAR OBJ1 = { 一個:1, B:2, C:3, d:4 }; var obj2 = { b:2, c:3, d:4, e:5 }; 結果是undefiend :( – Ludi
@Ludi怪異的,這裏是一個JSFiddle顯示這些相同的值的差異工作如期:http://jsfiddle.net/benjamine/tpgfwuk4/3/ – Benja