JSFiddle - React, Tailwind, and code Playground
HTML
<button onclick="doMerge()">Merge</button>
JavaScript
function mergeData(data) {
var outp = {};
// loop through each object and add
for (var i = 0; i < data.length; i++) {
var obj = data[i];
if (outp.hasOwnProperty(obj.country)) {
if (outp[obj.country].hasOwnProperty(obj.district)) {
if (outp[obj.country][obj.district].hasOwnProperty(obj.ward)) {
if (outp[obj.country][obj.district][obj.ward].hasOwnProperty(obj.county)) {
outp[obj.country][obj.district][obj.ward][obj.county].push(obj.company);
}
else {
if (obj.county == "" || obj.county == null) {
if (Array.isArray(outp[obj.country][obj.district][obj.ward])) {
outp[obj.country][obj.district][obj.ward].push(obj.company);
}
else {
outp[obj.country][obj.district][obj.ward] = [obj.company];
}
}
else {
outp[obj.country][obj.district][obj.ward][obj.county] = [obj.company];
}
}
}
else {
outp[obj.country][obj.district][obj.ward] = {};
outp[obj.country][obj.district][obj.ward][obj.county] = [obj.company];
}
} else {
outp[obj.country][obj.district] = {};
outp[obj.country][obj.district][obj.ward] = {};
outp[obj.country][obj.district][obj.ward][obj.county] = [obj.company];
}
} else {
outp[obj.country] = {};
outp[obj.country][obj.district] = {};
if (obj.county == "") {
outp[obj.country][obj.district][obj.ward] = [obj.company];
}
else {
...