Из массива с объектами вернуть уникальные, посчитать сколько раз они повторились и записать в новый массив с объектами

есть массив с объектами:

const arr = [
{
"city": "Апатиты",
"address": "sdfsfsfsfsdfs",
"name": "fdsfsfsdfs",
"position": "fsdfsdfsd",
"phone": "32434242342",
"problem": "vvzxvxcvcxvx",
"prioritet": "Не срочно",
"date": "2022.02.00 20:16:44",
"id": 1
},
{
"city": "Апатиты",
"address": "dfssdfsf",
"name": "vcxvxv",
"position": "fesfsefsef",
"phone": "3242424",
"problem": "dsfvcdsvdsv",
"prioritet": "Не срочно",
"date": "2022.02.00 20:17:01",
"id": 2
},
{
"city": "Апатиты",
"address": "fgdgdgdg",
"name": "gfdgdg",
"position": "gdfgdfg",
"phone": "4554353",
"problem": "fvxvxv",
"prioritet": "Не срочно",
"date": "2022.02.00 20:17:20",
"id": 3
},
{
"city": "Апатиты",
"address": "fgdgdgdg",
"name": "gfdgdg",
"position": "gdfgdfg",
"phone": "4554353",
"problem": "fvxvxv",
"prioritet": "Не срочно",
"date": "2022.02.00 20:17:23",
"id": 4
},
{
"city": "Кола",
"address": "czzxczc",
"name": "232323",
"position": "cxzccz",
"phone": "czczczx",
"problem": "23232",
"prioritet": "Не срочно",
"date": "2022.02.00 20:17:44",
"id": 5
}]

Надо вернуть из него только объекты с уникальным значением city и посчитать сколько раз значения повторялись, чтобы получилось вот так:

const newArr = [
 {
   city: Апатиты,
   count: 3
 },
 {
   city: Кола,
   count: 1
 }
]

Ответы (2 шт):

Автор решения: HaZcker
function getData() {
  const result = []

  arr.forEach((el) => {
    const newItem = {
      city: el.city
    }
    
    const existItem = result.find(item => newItem.city === item.city)

    if(!existItem) {
      newItem.count = 1
      result.push(newItem)
    } else {
      const itemIndex = result.indexOf(existItem)
      result[itemIndex].count +=1
    }
  })
   
  return result
}

Советую изучить методы массивов

→ Ссылка
Автор решения: EzioMercer

Вот вам простой, понятный и очень быстрый метод как решить эту проблему (вводные данные упрощены из-за ненадоберсти других св-в в алогритме):

const citiesInfo = [
  {"city": "Апатиты"},
  {"city": "Апатиты"},
  {"city": "Апатиты"},
  {"city": "Апатиты"},
  {"city": "Спрайт"},
  {"city": "Спрайт"},
  {"city": "Спрайт"},
  {"city": "Пепси"},
  {"city": "Пепси"},
  {"city": "Кола"}
]

const tempData = {}

for (const cityInfo of citiesInfo) {
    if (tempData.hasOwnProperty(cityInfo.city)) ++tempData[cityInfo.city];
    else tempData[cityInfo.city] = 1;
}

const resultArr = [];

for (const key in tempData) {
    resultArr.push({
        city: key,
        count: tempData[key]
    });
}

console.log(resultArr);

→ Ссылка