簡體   English   中英

合並兩個對象數組Javascript / Typescript

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM