Javascript函数返回未定义的,为什么?

Javascript函数返回未定义的,为什么?,javascript,algorithm,Javascript,Algorithm,我有一小段代码,我用它来尝试从平面列表中构建层次结构(确切地说是对象) 好吧,这应该可以,但由于某种原因,在列表的最后一项上,findParent函数返回未定义的值,即使我在返回之前调用的console.log确实给了我正确的值。你知道这是什么原因吗 var fl = [{ "pk": 1, "title": "paul", "parent": 3, "level": 2 }, { "pk": 2, "title":

我有一小段代码,我用它来尝试从平面列表中构建层次结构(确切地说是对象)

好吧,这应该可以,但由于某种原因,在列表的最后一项上,findParent函数返回未定义的值,即使我在返回之前调用的console.log确实给了我正确的值。你知道这是什么原因吗

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;
            }
        }
    }
}