Существует массив:Дерево из ассоциативного массива
let docs = [
{ "_id":"1", parent:"_", "title":"one"},
{ "_id":"2", parent:"1", "title":"two"},
{ "_id":"4", parent:"_", "title":"title"},
{ "_id":"5", parent:"4", "title":"www"},
{"_id":"_", "name":"root" },
];
Мне нужно, чтобы выйти из него, что это дерево:
{'_id':'_','name':'root','child':
[
{'_id':'1','parent':'_','title':'one','child':
[
{'_id':'2','parent':'1','title':'two','child':[]}
]
},
{'_id':'4','parent':'_','title':'title','child':
[
{'_id':'6','parent':'4','title':'vvv','child':[]}
]
}
]
}
Но мой код работает только если родительский элемент всегда выше в списке, чем дети, и я хочу сделать эту работу повсеместно.
Это код:
let node = {};
for (let doc of docs) {
doc.child = [];
node[doc._id] = doc;
if (typeof doc.parent === "undefined")
tree = doc;
else
node[doc.parent].child.push(doc);
}
console.log('tree->', JSON.stringify(tree));
код на codepen: http://codepen.io/alex183/pen/OWvrPG?editors=0112
ли вы имеете в виду для сортировки родителем вместо идентификатора? –