JSFiddle - React, Tailwind, and code Playground
by crucify
JavaScript
function toTree(flats) {
let indexObj = {}, treeObj = [];
flats.forEach(flat => {indexObj[flat.id] = flat});
for(let objName in indexObj) {
let iObj = indexObj[objName];
if(!iObj.parent || !indexObj[iObj.parent]) {
treeObj.push(iObj);
continue;
}
let parentObj = indexObj[iObj.parent];
if(!parentObj.children) parentObj.children = [];
parentObj.children.push(iObj);
}
return treeObj;
}
console.log(toTree([
{ id: 1, parent:0 },
{ id: 2, parent:1 },
{ id: 3, parent:1 },
{ id: 4, parent:3 },
{ id: 5, parent:0 },
]));