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

Как можно преобразовать массив из объектов с помощью функции reduce?

Есть массив из объектов, например:
let data=[
  {brand:'iowa', price:12},
  {brand:'iowa', price:42},
  {brand:'zero', price:58},
  {brand:'zero', price:32}]

Нужно преобразовать так:
let data=[
  {brand:'iowa', price:54},
  {brand:'zero', price:90}]

То есть, цены должны складываться в соответствии с названиями брендов. Как это можно сделать через фунциюю reduce или через любой другой способ?
  • Вопрос задан
  • 194 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const uniqueWithSum = (arr, idKey, sumKey) =>
  Object.values(arr.reduce((acc, n) => {
    const id = n[idKey];
    acc[id] ??= Object.assign(new n.constructor, n, { [sumKey]: 0 });
    acc[id][sumKey] += n[sumKey];
    return acc;
  }, {}));


const result = uniqueWithSum(data, 'brand', 'price');
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
  1. сделать объект, где ключи – названия брендов, а значения накапливают сумму
  2. из объекта снова сделать массив объектов первоначального вида


// итерации 1-го этапа:
{}
{'iowa': 12}
{'iowa': 12 + 42 = 54}
{'iowa': 54, 'zero': 58}
{'iowa': 54, 'zero': 58 + 32 = 90}


и на втором преобразовать объект {'iowa': 54, 'zero': 90} в массив как у вас ожидается.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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