function createTree(data, idField, parentField, rootParent) {
const
tree = {},
obj = {};
data.forEach(n => obj[n[idField]] = Object.assign({}, n));
Object.values(obj).forEach(n => {
if (n[parentField] === rootParent) {
tree[n[idField]] = n;
} else {
const t = obj[n[parentField]];
t.children = t.children || {};
t.children[n[idField]] = n;
}
});
return tree;
}
const tree = createTree(data, 'id', 'parent_id', 0);