score:0

Accepted answer

you could take the wanted groups first in an array, sort the data and assign the object to the group or to the end of a temp array and get the flat data as result.

var data = [{ name: "elig_database", ready: true }, { name: "elig_rules_service", ready: true }, { name: "elig_gateway", ready: true }, { name: "elig_gateway_latest", ready: true, latest: true }, { name: "elig_service_latest", ready: true, latest: true }, { name: "elig_service", ready: true }, { name: "hdxts", ready: false }, { name: "rules_version", ready: true }],
    together = [['gateway'], ['rules'], ['elig_database', 'elig_service']],
    groups = { gateway: [], rules: [], elig_database: [] },
    temp = [groups.gateway, groups.rules, groups.elig_database],
    result;

for (let o of data.sort(({ name: a }, { name: b }) => a.localecompare(b))) {
    let target = together.find(a => a.some(v => o.name.includes(v)));
    if (target) groups[target[0]].push(o);
    else temp.push(o);
}

result = temp.flat();

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


Related Query

More Query from same tag