What i mean is, imagine i have this data
const data = [
{ name: 'Apple', category: 'fruit' },
{ name: 'Orange', category: 'fruit' },
{ name: 'Banana', category: 'fruit' },
{ name: 'Milk', category: 'drink' },
{ name: 'Juice', category: 'drink' },
];
What i want is to show unique categories and show number of same items
[
{ count: 3, category: 'fruit' },
{ count: 2, category: 'drink' },
]
One Solution is leveraging JS Set to find out unique category and use it to get the count.
const data = [
{ name: 'Apple', category: 'fruit' },
{ name: 'Orange', category: 'fruit' },
{ name: 'Banana', category: 'fruit' },
{ name: 'Milk', category: 'drink' },
{ name: 'Juice', category: 'drink' },
];
const categories = new Set();
data.forEach((item) => {
categories.add(item.category);
})
const result = [];
categories.forEach((category) => {
const val = data.filter((item) => item.category === category);
result.push({count: val.length, category})
})
console.log(result);
I don't know if this is the right way to do but it should work
const data = [
{ name: 'Apple', category: 'fruit' },
{ name: 'Orange', category: 'fruit' },
{ name: 'Banana', category: 'fruit' },
{ name: 'Milk', category: 'drink' },
{ name: 'Juice', category: 'drink' },
];
function filterArray(arr) {
const map = new Map()
arr.map(i => map.set(i.category, map.get(i.category) + 1 || 1))
return [...map].map(i => ({'count': i[1],'category': i[0]}))
}
let result = filterArray(data)
console.log(result)