Can anyone help converting the following list of parent-child objects:
[
{
\"name\":\"root\",
\"_id\":\"root_id\",
},
{
\"name\":\"a1\"
There is an error in your string
a[p].children.push(t);
It should be
a[p].children.push(child);
also I'm little optimize it:
var data = [{"id":1,"name":"X","parentId":null},{"id":2,"name":"Y","parentId":1},{"id":3,"name":"D","parentId":2},{"id":2,"name":"S","parentId":1},{"id":5,"name":"K","parentId":4}]
var obj = {};
obj.rootElements = [];
for (i in data) {
var _elem = data[i];
if (_elem.parentId) {
var _parentId = _elem.parentId;
if (_parentId == _elem.id) {
// check children, if false - add
if (!_elem.children) {
_elem.children = [];
}
_elem.children.push(_elem);
}
else {
addChildToParent(_elem, _parentId);
}
}
else // is root
{
obj.rootElements.push(_elem);
}
}
function addChildToParent(child, parentId, root) {
for (j in data) {
if (data[j].id.toString() == parentId.toString()) {
if (!data[j].children) {
data[j].children = [];
}
data[j].children.push(child);
}
}
}
res.send(obj.rootElements);