Size: a a a

JavaScript — русскоговорящее сообщество

2020 March 06

L

Lookarious in JavaScript — русскоговорящее сообщество
Бранецкий Владлен
Привет всем. Подскажите пожалуйста как решить.

есть "большой" массив в котором 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 },
]
new Set([...arrName, ...secondArrName]) как то так, попробуй
источник

DT

Dmi Tgl in JavaScript — русскоговорящее сообщество
Так
источник

DT

Dmi Tgl in JavaScript — русскоговорящее сообщество
Ладно. я не жсер не буду лезть
источник

B

Baxxter in JavaScript — русскоговорящее сообщество
Lookarious
new Set([...arrName, ...secondArrName]) как то так, попробуй
это не сработает
источник

L

Lookarious in JavaScript — русскоговорящее сообщество
Baxxter
это не сработает
Сорян я не заметил что там user_id и id
источник

L

Lookarious in JavaScript — русскоговорящее сообщество
Да если даже не так
источник

B

Baxxter in JavaScript — русскоговорящее сообщество
Lookarious
Сорян я не заметил что там user_id и id
да не в этом дело, там разные обьекты - Set уникальность по ссылке проверяет, а не по содержимому
источник

L

Lookarious in JavaScript — русскоговорящее сообщество
Это объекты
источник

L

Lookarious in JavaScript — русскоговорящее сообщество
Да
источник

E

Evgen in JavaScript — русскоговорящее сообщество
Бранецкий Владлен
Привет всем. Подскажите пожалуйста как решить.

есть "большой" массив в котором 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 },
]
Ну а как бы ты делал? Просто пройдись по первому и второму массиву и объедени значения
источник

NT

Nikita Torchinskiy in JavaScript — русскоговорящее сообщество
Бранецкий Владлен
Привет всем. Подскажите пожалуйста как решить.

есть "большой" массив в котором 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 },
]
Как вариант - создать промежуточный объект или Map, у которого ключами будут user_id
Пройтись по всему большому массиву, создавая или суммируя данные в этом объекте
Преобразовать объект в массив и объединить с маленьким массивом
источник

Б

Бранецкий Владлен in JavaScript — русскоговорящее сообщество
логику понимаю, как в код это перевести?
источник

NT

Nikita Torchinskiy in JavaScript — русскоговорящее сообщество
Evgen
Ну а как бы ты делал? Просто пройдись по первому и второму массиву и объедени значения
Так пожалуй будет попроще )
источник

NT

Nikita Torchinskiy in JavaScript — русскоговорящее сообщество
dataArr.forEach(data => {
 const user = usersArr.find(({ id }) => data.user_id === id)
 user.clicks = (user.clicks || 0) + data.clicks
 user.page_views = (user.page_views || 0) + data.page_views
})
Где dataArr - большой массив, usersArr - маленький массив
источник

NT

Nikita Torchinskiy in JavaScript — русскоговорящее сообщество
Только тут объекты в usersArr будут мутироваться
Если нужен новый массив, то перед этим нужно все скопировать
источник

🐱

🐱 Rough Cat in JavaScript — русскоговорящее сообщество
Бранецкий Владлен
Привет всем. Подскажите пожалуйста как решить.

есть "большой" массив в котором 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 },
]
Lodash countBy?
источник

🐱

🐱 Rough Cat in JavaScript — русскоговорящее сообщество
Nikita Torchinskiy
dataArr.forEach(data => {
 const user = usersArr.find(({ id }) => data.user_id === id)
 user.clicks = (user.clicks || 0) + data.clicks
 user.page_views = (user.page_views || 0) + data.page_views
})
Где dataArr - большой массив, usersArr - маленький массив
Через редьюс тогда
источник

IK

Iliya Kobaliya in JavaScript — русскоговорящее сообщество
Спрошу еще тут) Ребят,помогите,что из этого можно вынести в devDependencies ?   "dependencies": {
   "@babel/plugin-transform-runtime": "^7.8.3",
   "@material-ui/core": "^4.9.4",
   "@material-ui/icons": "^4.9.1",
   "@material-ui/lab": "^4.0.0-alpha.44",
   "@testing-library/jest-dom": "^4.2.4",
   "@testing-library/react": "^9.4.0",
   "@testing-library/user-event": "^7.2.1",
   "@types/jest": "^25.1.3",
   "@types/node": "^12.12.27",
   "@types/react": "^16.9.23",
   "@types/react-dom": "^16.9.5",
   "@types/styled-components": "^5.0.0",
   "axios": "^0.19.2",
   "babel-polyfill": "^6.26.0",
   "body-parser": "^1.19.0",
   "bootstrap": "^4.1.1",
   "express": "^4.16.3",
   "method-override": "^3.0.0",
   "react": "^16.13.0",
   "react-dom": "^16.13.0",
   "react-scripts": "3.4.0",
   "react.dom": "^1.0.1",
   "styled-components": "^5.0.1",
   "typescript": "^3.8.2"
 }
источник

V

Vlad in JavaScript — русскоговорящее сообщество
Дима Ким Сыщик☂️
Привет люди подскажите как проще скопировать все поля массива
const copy = arr.map(el => el)
источник

NT

Nikita Torchinskiy in JavaScript — русскоговорящее сообщество
Vlad
const copy = arr.map(el => el)
Проще arr.slice()
источник