对象之间的深度比较

时间:2020-05-21 21:24:30

标签: javascript

我正在学习Javascript,遇到了这个练习,这是我应该编写的“ deepEqual”函数,我无法解决,即使在看到解决方案后,我仍然还是不太了解。我不了解rewrite -> H in Hs循环,尤其是Cannot change Hs, it is used in conclusion.部分。为什么我不能只说for!deepEqual(a[key], b[key]))?我从这一行中读到的是,“如果对象(keysA[key] !== keysB[key])(a[key] !== b[key])中的键的值不出现在a中,则b”,但是这些值是在那里,它们存在,我看不出它们之间的比较在哪里。显然我错了,但这是我对代码的理解。请赐教。

deepEqual

1 个答案:

答案 0 :(得分:0)

您不能说a[key] != b[key],因为这些值可以是对象。并且为了比较对象,您必须递归比较它们的内容-这就是您必须首先编写此deepEqual()函数的全部原因。

该行:

    if (!keysB.includes(key) || !deepEqual(a[key], b[key])) return false;

表示如果false不具有b作为属性,或者两个对象的key属性都递归不相等,则返回key。 / p>

如果该键确实存在,并且嵌套的对象相等,我们将继续使用下一个键进行循环。

在递归的根部进行的实际比较发生在第一行:

if (a === b) return true;