Javascript函数返回未定义的,为什么?
我有一小段代码,我用它来尝试从平面列表中构建层次结构(确切地说是对象) 好吧,这应该可以,但由于某种原因,在列表的最后一项上,findParent函数返回未定义的值,即使我在返回之前调用的console.log确实给了我正确的值。你知道这是什么原因吗Javascript函数返回未定义的,为什么?,javascript,algorithm,Javascript,Algorithm,我有一小段代码,我用它来尝试从平面列表中构建层次结构(确切地说是对象) 好吧,这应该可以,但由于某种原因,在列表的最后一项上,findParent函数返回未定义的值,即使我在返回之前调用的console.log确实给了我正确的值。你知道这是什么原因吗 var fl = [{ "pk": 1, "title": "paul", "parent": 3, "level": 2 }, { "pk": 2, "title":
var fl = [{
"pk": 1,
"title": "paul",
"parent": 3,
"level": 2
}, {
"pk": 2,
"title": "ringo",
"parent": null,
"level": 0
}, {
"pk": 3,
"title": "john",
"parent": 2,
"level": 1
}];
var ho = {};
var looplevel = 0;
var found = 0;
function findParent (ho,id){
for (i in ho) {
ob = ho[i];
if (ob.pk === id) {
console.log(ob);
return ob;
}
if (ob.children !== undefined){
findParent(ob.children,id);
}
}
}
while (fl.length != found) {
for (var i in fl) {
var item = fl[i];
if (item.level === looplevel) {
item.children = {};
if (looplevel === 0) {
ho[item.pk] = item;
console.log("adding " + item.title + " to hl");
found += 1;
} else {
console.log("adding " + item.title + " to " + item.parent);
ww = findParent(ho,item.parent);
console.log(ww);
ww.children[item.pk] = item;
found += 1;
}
looplevel += 1;
}
}
}
console.log(ho);
问题是您没有返回递归值
更新必须查看父项是否存在,这样您就不会提前离开循环
更新2只需重新阅读代码,变量i
和ob
将是全局变量,我更正了此变量的答案
问题是您没有返回递归值
更新必须查看父项是否存在,这样您就不会提前离开循环
更新2只需重新阅读代码,变量i
和ob
将是全局变量,我更正了此变量的答案
问题是您没有返回递归值
更新必须查看父项是否存在,这样您就不会提前离开循环
更新2只需重新阅读代码,变量i
和ob
将是全局变量,我更正了此变量的答案
问题是您没有返回递归值
更新必须查看父项是否存在,这样您就不会提前离开循环
更新2只需重新阅读代码,变量i
和ob
将是全局变量,我更正了此变量的答案
function findParent (ho,id){
for (var i in ho) {
var ob = ho[i];
if (ob.pk === id) {
console.log(ob);
return ob;
}
if (ob.children !== undefined){
var parent = findParent(ob.children,id);
if(parent) {//if our recursion found a parent
return parent;
}
}
}
}