2 つのオブジェクトの値が同じかどうかをチェックする関数を作成しようとしています。この関数では、元のオブジェクト内に値として格納されているすべてのオブジェクトが等しいかどうかを確認する必要があります。私が開発したアプローチ (以下のコードを参照) は、最初に非オブジェクト値の等価性をチェックすることです。次に、これらがすべて一致する場合は、オブジェクトを再度反復処理し、元の関数を再帰的に呼び出します。これにより、2 つのオブジェクトのネストされた各レベルを比較できます。
ただし、このアプローチは部分的にしか機能しません。再帰呼び出しの性質上、ネストされたオブジェクトの等価性は、オブジェクトの最初のキーと値のペアでしかチェックできません。ネストされたオブジェクトの最初のセットが比較され、再帰呼び出しが返されると、ネストされたオブジェクトを含む追加のキーと値のペアをチェックする方法がわかりません。関数は次のとおりです。
var deepEqual = function(val1, val2) {
if (typeof val1 === 'object' && typeof val2 === 'object') {
for (i in val1) {
for (i in val2){
if (typeof val1[i] !== 'object' && typeof val2[i] !== 'object') {
if (val1[i] !== val2[i]) {
return false
}
}
}
}
for (i in val1) {
for (i in val2){
if (typeof val1[i] === 'object' && typeof val2[i] === 'object') {
return deepEqual(val1[i], val2[i])
}
}
}
return true
}
else if (val1 === val2) {
return true
}
else return false
}
私の基本的な問題は、ネストされたオブジェクトの深い等価性をチェックするために再帰呼び出しが必要であると信じているが、このチェックを正常に実行できるのは 1 回だけだということです。誰もこのような問題を解決しようとしましたか? より具体的なものが必要な場合は、特定のオブジェクトに対する私の結果の例を提供します。ありがとう!