Можно взять массив ключей для требуемой вложенной группировки объекта и попытаться найти свойство name
с требуемым значением уровня.
Если найдено, вернуть этот элемент, в противном случае добавитьэтот предмет в собственность детей.
var data = [{ divisionName: "Adboom", merchantName: "Jaydox LTD", entityName: "beautifullyyoungskin.net" }, { divisionName: "Adboom", merchantName: "Jaydox LTD", entityName: "thinbodydiet.com" }, { divisionName: "Adboom", merchantName: "Jaydox LTD", entityName: "youthfulskincare.net" }, { divisionName: "Adult", merchantName: "Occonti Ltd", entityName: "datinginthe.eu (3d Secure)" }, { divisionName: "Adult", merchantName: "Occonti Ltd", entityName: "datinginthe.eu (Non-3d)" }, { divisionName: "Adult", merchantName: "Occonti Ltd", entityName: "datinginthe.eu - ST (Non-3d)" }, { divisionName: "Adult", merchantName: "Occonti Ltd", entityName: "datinginthe.eu ST (3d Secure)" }],
keys = ["divisionName", "merchantName", "entityName"],
result = data
.reduce((r, o) => {
keys.reduce((t, k) => {
var temp = (t.children = t.children || []).find(p => p.name === o[k]);
if (!temp) {
t.children.push(temp = { name: o[k] });
}
return temp;
}, r);
return r;
}, {})
.children;
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }