我有一个遍历我的对象的递归函数(带子项的嵌套对象),它返回一个对象作为结果(它应该工作),但是当在另一个函数中调用该函数时,第二次函数运行它返回undefined。
这是发起人:
$('a').click(function(){
if($(this).hasClass('open')){
return null;
}
console.log(this);
var parentId = $(this).attr('id');
var children = searchForChildrenByParentId(currentParentObject, parentId);
console.log(children);
if(children){
var ul = $(this).children();
children.forEach(function(child){
var li = addLi(child);
applyLiToUl(ul, li);
init();
})
}
$(this).addClass('open');
})
和递归函数:
function searchForChildrenByParentId(obj, stack){
for (var property in obj) {
if (property == "id") {
if(obj.id == stack ){
console.log(obj.children);
return obj.children;
} else if (obj.hasOwnProperty("children")){
obj.children.forEach(function(child){
searchForChildrenByParentId(child, stack);
})
} else {
return null;
}
}
}
}
递归函数完成它应该的工作,工作得很好,启动器也可以工作(在第一次运行时)。
启动器中的第一个console.log返回正确的元素, 控制台日志(在递归函数中)记录正确的对象,但是当对象返回到启动器时,控制台日志在那里给我未定义?
答案 0 :(得分:0)
好的,问题是我对递归的理解,即使函数给了我正确的对象递归仍然继续,因此返回一个未定义的对象。我所做的是将递归的结果分配给一个全局变量,并将该变量用于我的下一个任务
var childOfParentObject; //outside the function - in global scope
if(obj.id == stack ){
console.log(obj.children);
obj.children = childOfParentObject;
return childOfParentObject;
}
做了这个伎俩