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

Как сформировать новый массив объектов, сделав слияние по некоторому параметру?

Есть массив:

const arr = [ 
  {merch: 111, games: ['loto1', 'loto2']}, 
  {merch: 111, games: ['loto2', 'loto3']}, 
  {merch: 222, games: ['loto3', 'loto4']},
];

Массив состоит из объектов, у них могут быть схожие значения в поле merch и общие значения в games как сформировать новый массив, объединив в нем объекты по полю merch? При этом без дубликатов, на выходе хочу иметь подобное:

[
  {merch: 111, games: ['loto1', 'loto2', 'loto3']},
  {merch: 222, games: ['loto3', 'loto4']},
]

Пытался сделать через reduce из библиотеки lodash, но не до конца понимаю как это сделать.
  • Вопрос задан
  • 189 просмотров
Подписаться 1 Простой Комментировать
Решение пользователя Сергей Соколов К ответам на вопрос (2)
sergiks
@sergiks Куратор тега JavaScript
♬♬
Object.values(
  arr.reduce((acc, c) => {
    const { merch, games } = c;
    if (!acc[merch]) acc[merch] = c;
    else {
      const merged = [...acc[c.merch].games, ...games];
      acc[c.merch].games = [...new Set(merged)];
    }
    return acc;
  }, {})
);
Ответ написан
Комментировать