JSFiddle - React, Tailwind, and code Playground

Pellustro Taxonomy Tree

by Nalin Sajwan

JavaScript

console.time("Overall time");
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);
};

// To convert object of leaf node to 0.
working = JSON.parse(JSON.stringify( working ).split("{}").join("0"));

console.log("hierarchical json ==> \n",JSON.stringify(working, null, 4));

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]);
		}
	  
		children.push(obj);
	}
	return children;
}

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

console.log("hierarchical array ==> \n",JSON.stringify(heirarchy.children, null, 4));

var countLastChildren = function(object) {
    if(object.children) {
        var return_val = 0;
        object.children.forEach(function(el){
            return_val += countLastChildren(el);
        });
        return return_val; 
    } else {
        return 1;
    }
};

var travereTreeUpdateLength = function(tree){
    for(var i = 0; i < tree.length; i++) {
        if(typeof tree[i].children !== "undefined") {
            var sample =...