JSFiddle - React, Tailwind, and code Playground
JavaScript
// Create a hierarchical tree object from an adjacency list.
// Please note, `parent` references an ID and doesn't describe the nesting-level.
// See console output.
var flat = [
{ id: 1, name: "Business", parent: 0 },
{ id: 2, name: "Management", parent: 1 },
{ id: 3, name: "Leadership", parent: 2 },
{ id: 4, name: "Finance", parent: 1 },
{ id: 5, name: "Fiction", parent: 0 },
{ id: 6, name: "Accounting", parent: 1 },
{ id: 7, name: "Project Management", parent: 2 }
];
var tree = [];
var orphans = [];
function hasParent(id, array) {
for (var i = 0; i < array.length; i++) {
var el = array[i];
return el.id === id;
}
}
flat.forEach(function(cat) {
// Add top level categories.
if (!cat.parent) {
tree.push(cat);
return;
}
if (hasParent(cat.parent, tree)) {
tree[cat.id] = cat;
} else {
orphans[cat.id] = cat;
}
});
console.log(tree);
console.log('===');
console.log(orphans);