JSFiddle - React, Tailwind, and code Playground
JavaScript
var data = {
organisms:[
{name: 'Hemiptera.Miridae.Kanakamiris'},
{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 organisms = data.organisms.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 < organisms.length; i++)
addToHeirarchy(organisms[i], 0, working);
console.dir(working);
function remapHeirarchy(item) {
var children = [];
for (var k in item) {
children.push({
"name" : k,
"children" : remapHeirarchy(item[k])
});
}
return children;
}
var heirarchy = {
"name" : "ROOT",
"children" : remapHeirarchy(working)
};
console.dir(heirarchy);
document.write(JSON.stringify(heirarchy));