Как объединить два массива в один у которых ключи 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);