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);