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

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

Есть массивы:

const sum = [ {id: 1, name: 'a'}, {id: 2, name: 'b'}] 
const arr1 = [ {id: 1, cat: '1'}, {id: 2, cat: '6'}] 
const arr2 = [ {id: 1, s: '2'}, {id: 2, s: '6'}]

Надо получить:

const res = [{id: 1, name: 'a', cat: '1', s: '2'}, {id: 2, name: 'b', cat: '6', s: '6'}]
  • Вопрос задан
  • 147 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const merge = (key, ...arrs) =>
  Object.values(arrs.flat().reduce((acc, n) => (
    Object.assign(acc[n[key]] ??= {}, n),
    acc
  ), {}));


const result = merge('id', sum, arr1, arr2);

или

const merge = (key, ...arrs) =>
  Array.from(arrs.reduce((acc, arr) => arr.reduce((acc, n) => {
    const k = key(n);
    return acc.set(k, Object.assign(acc.get(k) ?? {}, n));
  }, acc), new Map).values());


const result = merge(n => n.id, sum, arr1, arr2);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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