JSFiddle - React, Tailwind, and code Playground

by ramnathv

JavaScript

var nodes = [
    {id: 1, name: "Peter"},
    {id: 2, name: "Paul", manager: 1},
    {id: 3, name: "Mary", manager: 1},
    {id: 4, name: "John", manager: 2},
    {id: 5, name: "Jane", manager: 2}
]

function tree(nodes) {
  var nodeById = {};

  // Index the nodes by id, in case they come out of order.
  nodes.forEach(function(d) {
    nodeById[d.id] = d;
  });

  // Lazily compute children.
  nodes.forEach(function(d) {
    if ("manager" in d) {
      var manager = nodeById[d.manager];
      if (manager.children) manager.children.push(d);
      else manager.children = [d];
    }
  });

  return nodes[0];
}

console.log(JSON.stringify(tree(nodes)))