【发布时间】:2012-10-01 19:30:54
【问题描述】:
我正在尝试创建一个递归函数,该函数将遍历多维对象并测试键是否存在于单独的对象中。如果键不存在我想打破循环并返回false,如果所有键都存在我想返回true。
我遇到的问题是该函数似乎总是返回 true。这是我正在使用的代码:
var properties = {'global': {'structure' : {'body': {}}}};
var testExists = {'global': {'structure': {'test': 'value'}}};
if( ! this.exists(properties, testExists)) {
console.log("DOESNT EXIST");
}
exists: function(destination, source) {
var exists = true;
check:
for (var property in source) {
if(destination[property]) {
arguments.callee(destination[property], source[property]);
}
else
{
exists = false;
break check;
}
}
console.log(exists);
return exists;
},
当我查看控制台以查看 'exists' 的值时,我看到两行第一行为假,第二行为真,因此我正在创建的递归一定有错误
【问题讨论】:
-
在执行你的代码时,我看到
false、true、true- 你期待什么? -
我想一有错误就中断循环/函数并返回错误。因此,在到达 testExists 对象中的关键“测试”时,因为它在属性对象中不存在,我希望函数返回 false
-
您的函数确实为该对象返回
false- 但该返回值不会阻止调用函数返回true。
标签: javascript recursion