我正在尝试编写一个函数来检查两个对象是否具有相同的值。此功能要求我检查存储为原始对象内的值的任何对象的相等性。我开发的方法(见下面的代码)是首先检查非对象值的相等性。然后,如果这些都匹配,我再次遍历对象并对原始函数进行递归调用,这允许我比较两个对象的每个嵌套级别。
但是,这种方法仅部分有效。递归调用的性质意味着我只能在对象中的第一个键值对处检查嵌套对象的相等性。一旦比较了第一组嵌套对象并且递归调用返回,我无法弄清楚如何检查包含嵌套对象的任何其他键值对。这是功能:
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
}
我的基本问题是我相信我需要一个递归调用来检查嵌套对象的深度相等,但我只能成功地进行一次检查。有没有人试图解决这样的问题?如果您需要更具体的内容,我将提供特定对象的结果示例。谢谢!