如何在递归函数中打破for循环并以Javascript返回?

如何在递归函数中打破for循环并以Javascript返回?,javascript,function,recursion,return,Javascript,Function,Recursion,Return,我试着比较两个对象的键,属性值并不重要 var obj1={ 傅:{ abc:“foo.abc”, }, 酒吧:{ aaa:{ bbb:“bar.aaa.bbb”//您缺少一份报税表: if(typeof(obj1[prop]) === "object" && !compareObjProps(obj1[prop], obj2[prop])) { return false; } 否则递归调用的结果将被完全忽略。是的,函数B调

我试着比较两个对象的键,属性值并不重要

var obj1={
傅:{
abc:“foo.abc”,
},
酒吧:{
aaa:{

bbb:“bar.aaa.bbb”//您缺少一份报税表:

    if(typeof(obj1[prop]) === "object"
        && !compareObjProps(obj1[prop], obj2[prop]))
    {
       return false;
    }

否则递归调用的结果将被完全忽略。

是的,函数B调用的函数a不能告诉B返回。有些人建议返回递归调用的结果,但这不会给出正确的结果,因为这会导致程序返回它找到的第一个子对象是否为id诱惑,如果所有对象都相同,则不是。我建议您进行以下修改:

if(typeof(obj1[prop]) === "object") {
   if(!compareObjProps(obj1[prop], obj2[prop])){
      return false;
   }
}
这将使您的程序按您的意愿传播“false”,但如果结果为“true”,则使其继续运行。

尝试以下方法:

function compareObjProps(obj1, obj2) {
    var result = true;
    for (var prop in obj1) {
        if (obj1.hasOwnProperty(prop) && !obj2.hasOwnProperty(prop)) {
            console.log("mismatch found");
            result = false;
        } else if (typeof(obj1[prop]) === "object") {
            result = compareObjProps(obj1[prop], obj2[prop]);
        }

        if (!result) {
            break;
        }
    }

    return result;
}

你怎么知道它不会返回false?你会评估返回值吗?@MeNoMore
var result=compareObjPros(obj1,obj2);console.log(result);
总是true…我想你的意思是递归调用返回false时应该返回(请参见编辑)…@AlexeiLevenkov:是的。我实际上是从路径而不是属性树的角度来考虑的。谢谢你的编辑。不……你的第一个或编辑过的版本都没有返回false。仍然是真的……我做错了什么吗?这很管用。我也做了同样的事情,添加了一个变量来跟踪结果,但没有成功。谢谢lan。@user1643156真棒,很高兴我这么做不起作用/有帮助。请确保您测试它以验证它是否完全起作用,尽管它看起来很好。如果您遇到任何问题,请告诉我!很抱歉,lan,但我不得不接受Zeta的答案,因为它不需要额外的变量。无论如何,谢谢。@user1643156没问题。如果您想要扩展此递归,我不确定这是否是一个好的解决方案做得更多,但只要你有事情要做,那就太好了!嘿嘿嘿…谁否决了这个答案?解释中可能有不恰当的地方。但代码确实有效!