{
...
type: "product",
country: "Russia",
city: "Moscow",
},
{
...
type: "product",
country: "Russia",
city: "Volgograd",
},
{
...
type: "object",
country: "Poland",
city: "Warszawa",
},
groupedItems() {
return this.items.reduce((acc, n) => {
for (const k in n) {
acc[k] = acc[k] || {};
acc[k][n[k]] = (acc[k][n[k]] || 0) + 1;
}
return acc;
}, {});
}
<div v-for="(group, groupName) in groupedItems">
<h3>{{ groupName }}:</h3>
<div v-for="(value, key) in group">{{ key }} ({{ value }})</div>
</div>
computed: {
countries () {
return this.data
.map((x) => x.country) // для каждого элемента из массива объектов data возвращаем страну
.reduce((r, с) => [...new Set(r.concat(с))], []) // оставляем только уникальные значения
.map((с) => { // для каждого элемента из полученного массива
return { // возвращаем
'country': с, // наименование страны
'count': this.data.filter(cx => cx.country === с).length // количество элементов в исходном массиве с таким же наименованием страны
}
})
}
}