Создать объект с ключами из одного массива, а значениями из другого
Есть массив юзеров с их id и именами.
const users = [
{
"id": "U043WGQLVEF",
"profile": {
"real_name": "Evangelos Milly",
},
},
{
"id": "U043WMCQ9K4",
"profile": {
"real_name": "Ignace Mantvydas",
},
},
{
"id": "U043Z6Y11GD",
"profile": {
"real_name": "Daniyal Dionysos",
},
},
{
"id": "U044EM1N6ES",
"profile": {
"real_name": "Goran Ainslie",
},
}
]
Отдельно есть массив id.
const id = ['U043WGQLVEF', 'U043Z6Y11GD', 'U044EM1N6ES'];
Как мне создать объект, где ключом будут id, а значениями соответствующие имена? По типу:
const obj = {
'U043WGQLVEF': "Evangelos Milly",
'U043Z6Y11GD': "Daniyal Dionysos",
'U044EM1N6ES': "Goran Ainslie"
}
Ответы (3 шт):
Автор решения: SwaD
→ Ссылка
Вот так можно сократить и оптимизировать ваш код.
Метод forEach всегда обходит весь массив целиком и его нельзя прервать, поэтому в вашем варианте вы обходили весь массив users столько раз, сколько элементов в массиве id.
const users = [
{
"id": "U043WGQLVEF",
"profile": {
"real_name": "Evangelos Milly",
},
},
{
"id": "U043WMCQ9K4",
"profile": {
"real_name": "Ignace Mantvydas",
},
},
{
"id": "U043Z6Y11GD",
"profile": {
"real_name": "Daniyal Dionysos",
},
},
{
"id": "U044EM1N6ES",
"profile": {
"real_name": "Goran Ainslie",
},
}
];
const id = ['U043WGQLVEF', 'U043Z6Y11GD', 'U044EM1N6ES'];
const obj = {};
id.forEach((el) => {
const find = users.find((item) => item.id === el);
obj[el] = find.profile.real_name;
});
console.log(obj)
Автор решения: Nikita Galadiy
→ Ссылка
Так же можно использовать метод reduce
const result = id.reduce((object, cid) => {
const user = users.find((user) => (user.id === cid));
return {
...object,
[user.id]: user.profile.real_name
};
}, {});
console.log(result);
Автор решения: Rudi
→ Ссылка
Можно что-то такое сделать..
const users = [{
"id": "U043WGQLVEF",
"profile": {
"real_name": "Evangelos Milly",
},
},
{
"id": "U043WMCQ9K4",
"profile": {
"real_name": "Ignace Mantvydas",
},
},
{
"id": "U043Z6Y11GD",
"profile": {
"real_name": "Daniyal Dionysos",
},
},
{
"id": "U044EM1N6ES",
"profile": {
"real_name": "Goran Ainslie",
},
}
];
const id = ['U043WGQLVEF', 'U043Z6Y11GD', 'U044EM1N6ES'];
const obj = {};
for (const user of users) if(id.includes(user.id)) obj[user.id] = user.profile.real_name;
console.log(obj)