Задать вопрос
t-1000
@t-1000
JavaScript, React, Nodejs

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

Есть "большой" массив, в котором 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 },
]
  • Вопрос задан
  • 4897 просмотров
Подписаться 1 Средний Комментировать
Ответ пользователя сергей захарченко К ответам на вопрос (5)
примерно так
let arr = []
arrBig.forEach((elem) => {
let clicks = (typeof arr[elem.user_id] !== "undefined") ? arr[elem.user_id].clicks + elem.clicks : elem.clicks;
let page_views = (typeof arr[elem.user_id] !== "undefined") ? arr[elem.user_id].page_views + elem.page_views : elem.page_views;
let row = { "page_views": page_views, "clicks": clicks }
arr[elem.user_id] = Object.assign((arr[elem.user_id] || {}), row);
})

arrSmall.map((item) => {
return {
id: item.id,
first_name: item.first_name,
page_views: (typeof arr[item.user_id] !== "undefined") ? arr[item.user_id].page_views : 0,
clicks: (typeof arr[item.user_id] !== "undefined") ? arr[item.user_id].page_views : 0,
};
});
Ответ написан
Комментировать