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 },
]));