Как объединить два массива в один у которых ключи id и user_id с одинаковыми значениями в js?

Подскажите пожалуйста как решить.

есть "большой" массив в котором user_id повторяются:

[
 { "user_id": 1, "page_views": 7, "clicks": 5 },
 { "user_id": 5, "page_views": 6, "clicks": 3 },
 { "user_id": 9, "page_views": 4, "clicks": 7 },
 { "user_id": 1, "page_views": 3, "clicks": 5 },
]

есть "маленький" массив все id уникальны:

[
 {"id":9,"first_name":"Barnabas"},
 {"id":1,"first_name":"Emlyn"},
 {"id":5,"first_name":"Ervin"},
]

Нужно слить их в общий массив, при этом отыскать все совпавшие значения id маленького массива c user_id большого просуммировать все значения ключей page_views и clicks добавить в объекты маленького массива.

Вид массива должен быть следующий, итоговый массив:

[
 {"id":9, "first_name":"Barnabas", "page_views": 4 , "clicks": 7 },
 {"id":1, "first_name":"Emlyn", "page_views": 10, "clicks": 10 },
 {"id":5, "first_name":"Ervin", "page_views": 7, "clicks": 5 },
]

Ответы (1 шт):

Автор решения: Yaant

Например, так:

let large = [{"user_id": 1, "page_views": 7, "clicks": 5},
  {"user_id": 5, "page_views": 6, "clicks": 3},
  {"user_id": 9, "page_views": 4, "clicks": 7},
  {"user_id": 1, "page_views": 3, "clicks": 5}
];

let small = [{"id": 9, "first_name": "Barnabas"},
  {"id": 1, "first_name": "Emlyn"},
  {"id": 5, "first_name": "Ervin"}
]

let result = small.map(item => {
  let { id, first_name } = item;
  let { page_views, clicks } = large.reduce((acc, data) => {
    if (data.user_id == id) {
      acc.page_views += data.page_views;
      acc.clicks += data.clicks;
    }
    return acc;
  }, {page_views: 0, clicks: 0});
  return { id, first_name, page_views, clicks }
});

console.log(result);

→ Ссылка