JSFiddle - React, Tailwind, and code Playground

by Arvind Pal

JavaScript

var data = {
    taxonomies:[
        {name: 'Hemiptera/Mirida/Nalin Sajwan'},
        {name: 'Hemiptera/Miridae/Neophloeobia/incisa'},
        {name: 'Lepidoptera/Nymphalidae/Ephinephile/rawnsleyi'},
        {name: 'a/af1/af1g1/af1g1s1'},
        {name: 'a/af1/af1g1/af1g1s2'},
        {name: 'a/af1/af1g1/af1g1s3'},
        {name: 'a/af1/af1g2/af1g2s1'},
        {name: 'a/af1/af1g2/af1g2s2'},
        {name: 'a/af2/af2g1/af2g1s1'},
        {name: 'a/af2/af2g1/af2g2s1'},
        {name: 'a/af3/af3g1/af3g1s1'}        
    ]
};

var taxonomies = data.taxonomies.map(function(v) {
        return v.name.split("/");
    });

function addToHeirarchy(val, level, heirarchy) {
    if (val[level]) {
        if (!heirarchy.hasOwnProperty(val[level]))
            heirarchy[val[level]] = {};
        addToHeirarchy(val, level + 1, heirarchy[val[level]]);
    }
}

var working = {};

for (var i = 0; i < taxonomies.length; i++)
    addToHeirarchy(taxonomies[i], 0, working);

console.log("json",working);

function remapHeirarchy(item) {
    var children = [];
    for (var k in item) {
    		var obj = {
            "name" : k
        };
        var subData = remapHeirarchy(item[k]);
        if(subData.length > 0)
        	obj["children"] = remapHeirarchy(item[k]);
        // console.log(k,' obj["children"] ==> ',obj["children"]);
        children.push(obj);
    }
    return children;
}

var heirarchy = {
    "name" : "ROOT",
    "children" : remapHeirarchy(working)
};

console.log("array",heirarchy);