首页 > 解决方案 > 使用 forEach 的 lodash 过滤器?

问题描述

无法从深度嵌套的对象数组中过滤掉一些数据。

我需要遍历每一天,然后遍历每个事件并过滤掉所有不包括电子邮件“barry@gmail.com”的与会者的事件。

'18 Sun': [
    {
        name: 'Event 01',
        attendees: [
            {
                name: 'John',
                email: 'john@gmail.com'
            },
            {
                name: 'Barry',
                email: 'barry@gmail.com'
            }
        ]
    }
],
'19 Mon':[
    {
        name: 'Event 02',
        attendees: [
            {
                name: 'John',
                email: 'john@gmail.com'
            }
        ]
    },
    {
        name: 'Event 03',
        attendees: [
            {
                name: 'John',
                email: 'john@gmail.com'
            },
            {
                name: 'Barry',
                email: 'barry@gmail.com'
            }
        ]
    }
]

过滤后的期望(删除事件 02,因为 barry@gmail.com 不存在)

'18 Sun': [
    {
        name: 'Event 01',
        attendees: [
            {
                name: 'John',
                email: 'john@gmail.com'
            },
            {
                name: 'Barry',
                email: 'barry@gmail.com'
            }
        ]
    }
],
    '19 Mon':[
    {
        name: 'Event 03',
        attendees: [
            {
                name: 'John',
                email: 'john@gmail.com'
            },
            {
                name: 'Barry',
                email: 'barry@gmail.com'
            }
        ]
    }
]

我试过这个片段

_.forEach(globalEvents, d => {
        _.forEach(d, e => {
            _.filter(e.attendees, p => {
                return p.email === 'barry@gmail.com'
            })
        })
    })

但这只是返回整个未过滤的数组。我想使用 lodash,但没有必要。

标签: javascriptfilterlodash

解决方案


试试这个代码它的作品..

_.forEach(data, d => {
    _.remove(d, e => { 
        return _.some(e.attendees, {email: 'barry@gmail.com'}) != true;
    })
});

推荐阅读