首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于否定递归条件感到困惑,示例代码包括

对于否定递归条件感到困惑,示例代码包括
EN

Stack Overflow用户
提问于 2020-06-22 22:00:04
回答 1查看 52关注 0票数 1

好的,我正在尝试编写一个deepEquals函数,它比较javascript中的对象,并告诉您它们是否相等。也就是说,如果对象具有相同的属性,而这些相同的属性具有相同的值。财产的顺序并不重要。我对代码的递归部分以及它的工作原理感到困惑。我看过一段视频,她写的代码和我差不多,但我不明白她是怎么工作的。不管怎么说,这是她的代码。

代码语言:javascript
复制
let deepEquals = (a,b) => {
    if (a === b) {
        return true;
    } else if (a && b && typeof a === 'object' && typeof b === 'object' && Object.keys(a).length === Object.keys(b).length) {
        for (let key in a) {
            if (key in b) {
                if (!deepEquals(a[key], b[key])) {
                    return false;
                    }
                }
                else {
                    return false;
            } 
            }
             return true;
    }
    return false;
};

这是我的不管用的:

代码语言:javascript
复制
let deepEquals = (a,b) => {

    if ( a === b ) {
        return true;
    } else if ( a && b && typeof a === 'object' && typeof b === 'object' && Object.keys(a).length === Object.keys(b).length ) {
        for ( let key in a ) {
            if ( key in b ) {
                deepEquals(a[key], b[key]);
            }
        }
    }

    return false;
};
代码语言:javascript
复制
let person = {
    lastName: "Bone",
    firstName: "Jordan",
    age: 34,
    position: "Information Technology",
    nest: {
        value: 13,
        lamp: "no",
        etc: false,
        testNull: null
    }
}

let person1 = {
    firstName: "Jordan",
    lastName: "Bone",
    age: 34,
    position: "Information Technology",
    nest: {
        value: 13,
        lamp: "no",
        etc: false,
        testNull: null
    }
}

console.log(deepEquals(person, person1));
C:\Node\Jordan\JSON>node deepEqualsYouTube.js
false

我的问题是:

很明显,为什么我的不起作用?

如果(!deepEquals(akey,bkey) )声明是怎么说的?我从来没有见过像这样使用递归。这是如何使代码工作的?

为什么她在for {}块后面加上一个“返回true;”语句?为什么把它放在那里,代码什么时候会落在那里呢?

如果有人能告诉我我在这里做什么,那就太好了。非常感谢。

乔丹

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-22 22:04:11

a)如果键存在于两个对象中,则丢弃deepEquals的结果。

变化

代码语言:javascript
复制
if ( key in b ) {
    deepEquals(a[key], b[key]);
}

代码语言:javascript
复制
if (!( key in b ) || !deepEquals(a[key], b[key])){
   return false;
}

b) (!deepEquals(a[key], b[key])正在检查在键key处对对象ab的值调用deepEquals的结果是否为假,即值不完全相等。

c)循环后有一个return true,因为循环检查任何不完全相等的值。只有当所有值相等时,执行才会达到这个点,即deepEquals(a[key], b[key])没有为任何key返回false,而且两个对象都有相同的键。在这一点上,这两个对象已被证明是非常平等的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62524168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档