0

フラット リスト (正確にはオブジェクト) から階層を構築するために使用するこの小さなコードがあります。

私の知る限り、これは機能するはずですが、何らかの理由で、リストの最後の項目で、返す直前に呼び出す console.log が正しい値を与えても、findParent 関数は未定義を返します。何がこれを引き起こしているのでしょうか?

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);
4

1 に答える 1