Задать вопрос
@dGololobov
начинающий

Как уникализировать массив объектов по значениям одного из их свойств, попутно просуммировав значения другого свойства?

Есть массив объектов с дублирующимися id:

[ 
  { id: '235540633', duration: 163 },
  { id: '222333444', duration: 100 },
  { id: '112233445', duration: 31 },
  { id: '112233445', duration: 63 } 
]

Из него нужно получить массив без дублирующихся id, но при этом свойство duration должно суммироваться, т.е.:

[ 
  { id: '235540633', duration: 163 },
  { id: '222333444', duration: 100 },
  { id: '112233445', duration: 94 }
]
  • Вопрос задан
  • 1458 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const uniqueWithSum = (arr, idKey, sumKey) =>
  Object.values(arr.reduce((acc, n) => {
    const id = n[idKey];
    acc[id] = acc[id] || Object.assign(new n.constructor, n, { [sumKey]: 0 });
    acc[id][sumKey] += n[sumKey];
    return acc;
  }, {}));

// ваш случай
const result = uniqueWithSum(arr, 'id', 'duration');

// элементам не обязательно быть объектами, это могут быть и массивы
uniqueWithSum([
  [ 'A', 1 ],
  [ 'B', 5 ],
  [ 'A', 2 ],
  [ 'A', 3 ],
], 0, 1) // [ [ 'A', 6 ], [ 'B', 5 ] ]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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