考虑下面的函数的蓝图,它试图比较两个对象的比较:对象与递归函数
function objectCompare(a,b,path){
for (var prop in a) {
path=prop;
if (a.hasOwnProperty(prop) && !(b.hasOwnProperty(prop))) {
...
return false;
}
...
if (detectType(a[prop])==='Object'){
if (!objectCompare(a[prop],b[prop],path))
return false;
}
...
}
return true;
}
detectType
是我自己的函数检查一个变量的类型。我的问题是,每次我们有递归调用时,我都想丰富变量path
。然而,在当递归调用结束的同时,path
必须遍历初始对象的剩余财产的名称,而不浓... 试想以下对象:
var Obj1 = {
p1: 's',
p2: {
p1: {a: { propA: 'a', propB: 'b' }},
p2: 'g',
}
};
var Obj2 = {
p1: 's',
p2: {
p1: {a: { propA: 'a', propB: 'c' }},
p2: 'g',
}
};
我想path
时功能objectCompare
返回具有以下值:p2.p1.a.propB
即,使两个对象不同的点。我如何实现这一目标?
现在已经有很多的问题,并约在Javascript对象比较的答案。 – trincot
@ILIAS,如果所有对象都具有严格的属性顺序,则可以以非常简单的方式完成比较 – RomanPerekhrest
您能否给我一些提示? –