JSFiddle - React, Tailwind, and code Playground

by Amal Das

JavaScript

var data = [
   {
      "name":"root",
      "_id":"root_id",
   },
   {
      "name":"a1",
      "parentAreaRef":{
         "id":"root_id",
      },
      "_id":"a1_id",
   },
   {
      "name":"a2",
      "parentAreaRef":{
         "id":"a1_id",
      },
      "_id":"a2_id",
   },
   {
      "name":"a3",
      "parentAreaRef":{
         "id":"a2_id",
      },
      "_id":"a3_id",
   },
   {
      "name":"b1",
      "parentAreaRef":{
         "id":"root_id",
      },
      "_id":"b1_id",
   },
   {
      "name":"b2",
      "parentAreaRef":{
         "id":"b1_id",
      },
      "_id":"b2_id",
   },
   {
      "name":"b3",
      "parentAreaRef":{
         "id":"b1_id",
      },
      "_id":"b3_id",
   }
];

var idToNodeMap = {};
var root = null;
for(var i = 0; i < data.length; i++) {
    var datum = data[i];
    datum.children = [];
    idToNodeMap[datum._id] = datum;
    
    if(typeof datum.parentAreaRef === "undefined") {
        root = datum;        
    } else {
        parentNode = idToNodeMap[datum.parentAreaRef.id];
        parentNode.children.push(datum);
    }
}

console.log(root);