Это похоже на ответ от Masheer Ali, но я думаю, что сокращение немного лучше:
const transform = arr => Object .values (arr .reduce ((a, {id, ruleDesc}) =>
({...a, [id]: {id, ruleDesc: [...( (a [id] || {}) .ruleDesc || [] ), ruleDesc]}}),
{}
))
const rules = [{id: 11, ruleDesc: "rule 1 "}, {id: 15, ruleDesc: "rule 2 "}, {id: 12, ruleDesc: "rule 3 "}, {id: 11, ruleDesc: "rule 4 "}, {id: 11, ruleDesc: "rule 5 "}]
console .log (
transform (rules)
)
Одним из преимуществ является то, что если у вас есть дополнительные свойства, которые вы хотите объединить, это всего лишь незначительная настройка:
const transform = arr => Object .values (arr .reduce ((a, {id, ruleDesc, ...rest}) =>
({...a, [id]: {...(a[id] || {}), id, ruleDesc: [...((a[id] || {}).ruleDesc || []) , ruleDesc], ...rest}}),
{}
))