我得到了以下问题,我正在寻找一个非常有效的方法来做到这一点。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