フラット リスト (正確にはオブジェクト) から階層を構築するために使用するこの小さなコードがあります。
私の知る限り、これは機能するはずですが、何らかの理由で、リストの最後の項目で、返す直前に呼び出す 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);