Вы можете достичь этого, используя простой reduce
let cats=[{cat:'letter',subCat:'A'},{cat:'letter',subCat:'B'},{cat:'number',subCat:'2'},{cat:'number',subCat:'3'},{cat:'number',subCat:'4'},{cat:'other',subCat:'+'},]
const merged = cats.reduce((a, {cat, subCat})=>{
a[cat] = a[cat] || {cat, subCat:[]}
a[cat]["subCat"].push(subCat)
return a;
},{})
console.log(Object.values(merged))
Создайте аккумулятор с каждым уникальным cat
как key
и нужным вам объектом в конечном массиве как value
, например:
{
"letter": {
"cat": "letter",
"subCat": [
"A",
"B"
]
}
}
Затем используйте Object.values
, чтобы получить только значения в массиве.
Вы можете сделать все это за один раз:
let cats = [{cat:'letter',subCat:'A'},{cat:'letter',subCat:'B'},{cat:'number',subCat:'2'},{cat:'number',subCat:'3'},{cat:'number',subCat:'4'},{cat:'other',subCat:'+'},]
const merged = Object.values(cats.reduce((a,{cat, subCat}) => (
(a[cat] = a[cat] || {cat, subCat:[]})["subCat"].push(subCat), a
),{}))
console.log(merged)