繁体   English   中英

循环中的javascript递归返回语句不起作用

[英]javascript recursion in loop return statement not working

我有一个循环,其中有一个不返回和停止的递归函数。 这是代码

var obj = {
    here: { is: "an" },
    object: 2
};
var obj1 = {
    here: { is: "aan" },
    object: 2
};
function objectTester(x) {
    if (typeof x === 'object' && x !== null)
        return true;
    else
        return false;
}

function deepEqual(valOne, valTwo) {
    debugger
    if (objectTester(valOne) && objectTester(valTwo)) {
        for (key in valOne) {
            if (valTwo.hasOwnProperty(key)) {
                if (objectTester(valOne[key]) && objectTester(valTwo[key])) {
                    deepEqual(valOne[key], valTwo[key]);
                }
                else {
                    if (valOne[key] === valTwo[key]) {
                    }
                    else {

                        return false;       //function dose not stop executing and return false
                    }

                }

            }
            else {

                return false;
            }
        }
        return true;
    }
    else {

        return false;
    }
}
console.log(deepEqual(obj, obj1));  

链接

当您在此处递归调用deepEqual时:

if (objectTester(valOne[key]) && objectTester(valTwo[key])) {
    deepEqual(valOne[key], valTwo[key]);
}

您将忽略递归调用的返回值,因此无论内部对象是否相等,它都会遍历所有内容。

尝试

if(!deepEqual(valOne[key], valTwo[key])){ return false }

另一种选择是抛出异常(并在顶部捕获),而不是返回布尔值。 无论您具有多少递归级别,这都使您的控制流直接跳出来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM