は、2つのオブジェクトを比較しようとすると、以下の機能の青写真を考えてみましょう:は再帰関数との比較をオブジェクト
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
つまり、2つのオブジェクトを異なるものにする点。どうすればそれを達成できますか?
JavaScriptでオブジェクトを比較に関する質問と回答の多くはすでにあります。 – trincot
@ILIAS、すべてのオブジェクトが厳密なプロパティの順序を持っている場合、比較はずっと簡単な方法で行うことができます – RomanPerekhrest
私はいくつかのヒントを教えてください。 –