Javascript函数返回undefined,为什么?

时间:2013-10-26 18:03:30

标签: javascript algorithm

我有一小段代码,我试图用平面列表构建一个层次结构(对象是准确的。)

AFAIK这应该可行,但由于某种原因,在列表的最后一项上,findParent函数返回undefined,即使我在返回之前调用的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);

1 个答案:

答案 0 :(得分:3)

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

问题是你没有返回递归值。

更新必须查看父级是否存在,因此您不要提前离开

更新2 只是重新阅读您的代码,变量iob将是全局的,我更正了此变量的答案