[英]Add matching values from one array to an array of original object
I have a users
list like the following:我有一个如下所示的
users
列表:
[
{
user: a,
email: a.com,
events: []
},
{
user: b,
email: b.com
events: []
}
]
And an events
list:和一个
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
},
]
And I'm trying to combine the list of events by user into a array on the original users object like so:我正在尝试将用户的事件列表组合到原始用户对象上的数组中,如下所示:
[
{
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
}
]
}
]
My original intuition is to simply iterate over the events list by each user and where they match by user
value, push a new object to the users.events array.我最初的直觉是简单地遍历每个用户的事件列表以及它们与
user
值匹配的user
,将一个新对象推送到 users.events 数组。 However, I'm not a JS pro, and I'm sure there's a combination of assign/filter/map/reduce or lodash that streamlines this type of problem.但是,我不是 JS 专家,我确信可以使用assign/filter/map/reduce 或lodash 的组合来简化此类问题。 Any help is greatly appreciated!
任何帮助是极大的赞赏!
Please try this:请试试这个:
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.