JSFiddle - React, Tailwind, and code Playground
JavaScript
var data = [
'Business / Finance',
'Business / Management',
'Business / Management / Leadership',
'Business / Team / Leadership'
];
var result = [
{ name: 'Business', trail: null, path: 'Business' },
{ name: 'Finance', trail: 'Business', path: 'Business / Finance' },
{ name: 'Management', trail: 'Business', path: 'Business / Management' },
{ name: 'Leadership', trail: 'Business / Management', path: 'Business / Management / Leadership' },
{ name: 'Team', trail: 'Business / Team', path: 'Business / Team / Leadership' },
{ name: 'Leadership', trail: 'Business / Team', path: 'Business / Team / Leadership' }
];
var categories = [];
function toArray(path) {
return path.split(' / ');
}
function getTrail(parts) {
if (parts.length == 1) {
return null;
}
parts = parts.slice(0, -1);
return parts.join(' / ');
}
function exists(name, trail, categories) {
for (var n = 0; n < categories.length; n++) {
var category = categories[n];
if (name === category.name && trail === category.trail) {
return true;
}
}
return false;
}
function createCategories(path) {
var parts = toArray(path);
for (var i = 0; i < parts.length; i++) {
var name = parts[i];
var trail = getTrail(parts);
if (!exists(name, trail, categories)) {
categories.push({
name: name,
trail: trail,
path: path
});
}
}
}
data.forEach(createCategories);
console.log(categories);