[英]Add matching values from one array to an array of original object
我有一個如下所示的users
列表:
[
{
user: a,
email: a.com,
events: []
},
{
user: b,
email: b.com
events: []
}
]
和一個events
列表:
[
{
user: a,
start: 2020-01-01
end: 2020-01-02
},
{
user: a,
start: 2020-02-01
end: 2020-02-02
},
{
user: b,
start: 2020-03-01
end: 2020-03-02
},
]
我正在嘗試將用戶的事件列表組合到原始用戶對象上的數組中,如下所示:
[
{
user: a,
email: a.com,
events: [
{
start: 2020-01-01
end: 2020-01-02
},
{
start: 2020-02-01
end: 2020-02-02
}
]
},
{
user: b,
email: b.com,
events: [
{
start: 2020-03-01
end: 2020-03-02
}
]
}
]
我最初的直覺是簡單地遍歷每個用戶的事件列表以及它們與user
值匹配的user
,將一個新對象推送到 users.events 數組。 但是,我不是 JS 專家,我確信可以使用assign/filter/map/reduce 或lodash 的組合來簡化此類問題。 任何幫助是極大的贊賞!
請試試這個:
const userEvents = [
{
user: a,
email: a.com,
events: []
},
{
user: b,
email: b.com,
events: []
}
]
const userStartEnds = [
{
user: a,
start: 2020-01-01,
end: 2020-01-02
},
{
user: a,
start: 2020-02-01,
end: 2020-02-02
},
{
user: b,
start: 2020-03-01,
end: 2020-03-02
},
]
[
{
user: a,
email: a.com,
events: [
{
start: 2020-01-01,
end: 2020-01-02
},
{
start: 2020-02-01,
end: 2020-02-02
}
]
},
{
user: b,
email: b.com,
events: [
{
start: 2020-03-01,
end: 2020-03-02
}
]
}
]
userEvents.map((userEvent) => ({
...userEvent,
events: userStartEnds
.filter(({ user }) => (userEvent.email === user.email))
.map(({ start, end }) => ({ start, end }))
}))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.