Объединение объектов из массива на основе значения свойства

У меня есть массив объектов в моем JS-приложении, содержащий имя даты, дату и некоторые элементы:

const records = [
  { name: 'Carpat', date: '01/06/18', items: 12 },
  { name: 'Carpat', date: '01/06/18', items: 34 },
  { name: 'Carpat', date: '02/06/18', items: 13 },
  { name: 'Carpat', date: '02/06/18', items: 15 },
  { name: 'Carpat', date: '03/06/18', items: 55 },
  { name: 'Carpat', date: '04/06/18', items: 66 },
]

Я хотел бы уменьшить этот массив, чтобы объекты с одинаковой датой были объединены в один, а свойство новых элементов было результатом суммы этого свойства объединенного объекта. Результат должен быть таким:

const records = [
      { name: 'Carpat', date: '01/06/18', items: 46 },
      { name: 'Carpat', date: '02/06/18', items: 28 },
      { name: 'Carpat', date: '03/06/18', items: 55 },
      { name: 'Carpat', date: '04/06/18', items: 66 },
    ]

Как лучше всего это сделать?

Привет! Пожалуйста, возьмите тур и прочтите центр помощи, в частности Как мне задать хороший вопрос?. Лучше всего здесь провести свое исследование, поиск для связанных тем по SO, и попробовать. Если вы застряли и не можете оторваться после дополнительных исследований и поиска, опубликуйте минимальный воспроизводимый пример своей попытки и конкретно укажите, где вы застряли. Люди будут рады помочь. Удачи!

T.J. Crowder 06.06.2018 16:41

Повторите свой комментарий к теперь удаленный репост этого: "Только что починил, но все равно ..." Нет, вы этого не сделали. Я неоднократно говорил вам, как это сделать, но вы предпочли не делать этого. Мы (Адриан, Йонас В. и я) сделали это за вас.

T.J. Crowder 06.06.2018 17:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
53
1

Ответы 1

Просто используйте хеш-таблицу дат и отфильтруйте дубликаты:

const hash = {};

const result = records.filter(el => {
  if (hash[el.date]) {
    hash[el.date].items += el.items;
    return false;
  } else {
    hash[el.date] = el;
    return true;
  }
});

Живой пример:

const records = [
  { name: 'Carpat', date: '01/06/18', items: 12 },
  { name: 'Carpat', date: '01/06/18', items: 34 },
  { name: 'Carpat', date: '02/06/18', items: 13 },
  { name: 'Carpat', date: '02/06/18', items: 15 },
  { name: 'Carpat', date: '03/06/18', items: 55 },
  { name: 'Carpat', date: '04/06/18', items: 66 },
];

const hash = {};

const result = records.filter(el => {
  if (hash[el.date]) {
    hash[el.date].items += el.items;
    return false;
  } else {
    hash[el.date] = el;
    return true;
  }
});

console.info(result);
.as-console-wrapper {
  max-height: 100% !important;
}

Не думаю, что это работает ...

Anto 06.06.2018 17:04

Другие вопросы по теме