Flat Array to Tree
by neonDog
HTML
<html>
<head>
<title>Unflatten a flat Array</title>
</head>
<body>
</body>
</html>
JavaScript
let arr = [
{id: 1, parent_id: 0},
{id: 2, parent_id: 0},
{id: 3, parent_id: 1},
{id: 4, parent_id: 3},
{id: 5, parent_id: 4},
{id: 6, parent_id: 4},
{id: 7, parent_id: 3},
{id: 8, parent_id: 2}
]
function getUnflatten(arr, parent_id) {
let output = []
for(const obj of arr) {
if(obj.parent_id === parent_id) {
var children = getUnflatten(arr, obj.id)
if (children.length) {
obj.children = children
}
output.push(obj)
}
}
return output
}
let tree = getUnflatten(arr, 0)
document.body.innerHTML = `<pre> ${JSON.stringify(tree, null, ' ')}`