Javascript - deepEqual比较和递归

时间:2015-04-01 00:51:24

标签: javascript function loops recursion

我自学JavaScript,而且我从 Eloquent JavaScript 中坚持以下问题:

  

编写一个函数deepEqual,它接受两个值并返回true   只有它们是相同的值或具有相同的对象   与递归相比,其值也相等的属性   打电话给deepEqual。找出是否比较两件事   身份(使用===运算符)或通过查看他们的身份   属性,您可以使用typeof运算符。如果它产生"对象"   对于这两个值,您应该进行深入比较。但你必须采取   一个愚蠢的例外:由历史事故,typeof   null也会生成" object"。

我的问题: 当console.log(deepEqual(obj, {here: {is: "an"}, object: 2}))a[key]{ is: 'an' }b[key]时,为什么{ is: 'an' }会显示为false,但如果该代码替换为!deepEqual(a[key], b[key]),则为true?

代码:

function deepEqual(a, b){
    if (a === b) {
        return true;
    } 
    else if (typeof a== typeof b && !(a===null ||b===null)){
        for(var key in b){
            for(key in a){
                if(! (key in a)){
                    return false;
                } 
                else if (a[key] !== b[key]){
                    return false;
                }
                else 
                    return true;
            }
        }
    }
  else
      return false;
}

var obj = {here: {is: "an"}, object: 2};
console.log(deepEqual(obj, {here: {is: "an"}, object: 2}));

1 个答案:

答案 0 :(得分:1)

由于a[key]b[key]都是对象,因此您也需要使用deepEquals

目前,您并未以递归方式调用deepEquals,因此无法实现这一目标。