[英]Merging two arrays of objects Javascript / Typescript
我有兩個對象數組,看起來像這樣:
const users = [
{
status: 'failed',
actionName: 'blabla',
userId: 1,
},
{
status: 'success',
actionName: 'blablabla',
userId: 2,
},
];
第二個
const usersDetails = [
{
name: 'Joseph',
id: 1,
},
{
name: 'Andrew',
id: 2,
},
];
我想檢查 userId 是否等於 id ,如果是,則將 usersDetails 中的名稱推送到 users 對象中。 所以輸出看起來像這樣:
const users = [
{
status: 'failed',
actionName: 'blabla',
userId: 1,
name: 'Joseph'
},
{
status: 'success',
actionName: 'blablabla',
userId: 2,
name: 'Andrew'
}];
最簡單的解決方案是:
const users = [ { status: 'failed', actionName: 'blabla', userId: 1, }, { status: 'success', actionName: 'blablabla', userId: 2, }, ]; const usersDetails = [ { name: 'Joseph', id: 1, }, { name: 'Andrew', id: 2, }, ]; const getAllUserInfo = () => users.map(user => { const userExtraInfo = usersDetails.find(details => details.id === user.userId) const fullUser = {...user, ...userExtraInfo} delete fullUser.id return fullUser }) console.log(getAllUserInfo())
const users = [ { status: 'failed', actionName: 'blabla', userId: 1, }, { status: 'success', actionName: 'blablabla', userId: 2, }, ]; const usersDetails = [ { name: 'Joseph', id: 1, }, { name: 'Andrew', id: 2, }, ]; users.forEach(each => { const found = usersDetails.find(detail => detail.id === each.userId); if (found) { each.name = found.name; } }); console.log(users);
你可以試試這段代碼:
let result = users.map(user => ({...user, ...usersDetails.find(userDetail => userDetail.id == user.userId) }));
console.log(result);
如果您只想從第二個數組中獲取name
:
let result = users.map(user => ({...user, 'name': usersDetails.find(userDetail => userDetail.id == user.userId).name }));
如果你想獲得所有屬性 exepted id
::
let result = users.map(user => {
let result = {...user, ...usersDetails.find(userDetail => userDetail.id == user.userId) }
delete result.id;
return result;
});
const users = [ { status: 'failed', actionName: 'blabla', userId: 1, }, { status: 'success', actionName: 'blablabla', userId: 2, }, ]; const usersDetails = [ { name: 'Joseph', id: 1, }, { name: 'Andrew', id: 2, }, ]; const newUsers = users.map(user => { user.name = usersDetails.find(u => u.id === user.userId)?.name; return user; }); console.log(newUsers);
希望這個答案對你有用
const users = [ { status: "failed", actionName: "blabla", userId: 1, }, { status: "success", actionName: "blablabla", userId: 2, }, ]; const usersDetails = [ { name: "Joseph", id: 1, }, { name: "Andrew", id: 2, }, ]; users.map((e) => { usersDetails.find((_e) => { if (e.userId === _e.id) { e.name = _e.name; } }); }); console.log(users);
你可以用一個循環來做這樣的事情
const users = [ { status: "failed", actionName: "blabla", userId: 1, }, { status: "success", actionName: "blablabla", userId: 2, }, ]; const usersDetails = [ { name: "Joseph", id: 1, }, { name: "Andrew", id: 2, }, ]; const result = Object.values([...users, ...usersDetails].reduce((res, {userId, id,...item}) => { const key = id || userId return { ...res, [key]: {...(res[key] || {userId: key}), ...item} } }, {})) console.log(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.