У меня есть объект с такой структурой:
[{category:'A',sub:'A-1'},
{category:'B',sub:'A-1'},
{category:'A',sub:'B-1'},
{category:'A',sub:'A-1'}];
и я хочу сгруппировать по категориям и посчитать повторения свойства 'sub', чтобы получить что-то вроде этого:
[
{category:'A',data:[{sub:'A-1',count:2},{sub:'B-1',count:1}]},
{category:'B',data:[{sub:'A-1',count:1}]}
]
Я думаю, что почти там, но я не могу понять, как сделать это правильно. Вот мой код:
let myData:any[]=[{category:'A',sub:'A-1'},{category:'B',sub:'A-1'},{category:'A',sub:'B-1'},{category:'A',sub:'A-1'}];
let categories= Array.from(new Set(myData.map(x => x.category)));
let statistics=categories.map(x=>{
let j={category:x,data:[]};
j.data.push( myData.filter(a=>a.category==x)
.reduce((a, c) => (a[c.sub] = (a[c.sub] || 0) + 1, a), Object.create(null)));
return j;
})
console.log(JSON.stringify( statistics));
Но вывод генерируется именно так:
[
{"category":"A","data":[{"A-1":2,"B-1":1}]},
{"category":"B","data":[{"A-1":1}]}
]