[英]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.