Задать вопрос
@DyadkoOrest

Как сосчитать количество повторений свойств в массиве объектов?

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

[
    { name: 'One', id: 3 },
    { name: 'Two', id: 1 },
    { name: 'Three', id: 2 },
    { name: 'Four', id: 1 }
]

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

[
    { id: 3, count: 1 },
    { id: 1, count: 2 },
    { id: 2, count: 1 },
]

Как это сделать?
  • Вопрос задан
  • 154 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Делаем ровно то, что спрошено:

const result = Object.values(arr.reduce((acc, { id }) => (
  (acc[id] ??= { id, count: 0 }).count++,
  acc
), {}));

Или, решаем задачу в более общем виде:

function uniqueWithCount(data, key, countKey) {
  const getKey = key instanceof Function ? key : n => n[key];
  const unique = new Map;

  for (const n of data) {
    const k = getKey(n);
    unique
      .set(k, unique.get(k) ?? { ...n, [countKey]: 0 })
      .get(k)[countKey]++;
  }

  return unique;
}

const result = Array.from(
  uniqueWithCount(arr, 'id', 'count').values(),
  ({ id, count }) => ({ id, count })
);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы