考慮下面的函數的藍圖,它試圖比較兩個對象的比較:對象與遞歸函數
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
您能否給我一些提示? –