简体   繁体   English

将一个数组中的匹配值添加到一组原始对象

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM