使用lodash过滤WithIn数组中的数组

时间:2019-11-04 09:18:18

标签: javascript arrays node.js json array-filter

我具有以下JSON结构。

comapany : XYZ
Emp Info:[
            {
                empName: A,
                empID:1
                salary[
                    {
                        year: 2017,
                        value: 3000
                    },
                    {
                        year: 2018,
                        value: 5000
                    }
                ]
            },
            {
                empName: B,
                empID:2
                salary[
                    {
                        year: 2017,
                        value: 6000
                    },
                    {
                        year: 2018,
                        value: 3000
                    }
                ]
            },
        {
            empName: C,
            empID:3
            salary[
                {
                    year: 2017,
                    value: 3000
                },
                {
                    year: 2018,
                    value: 8000
                }
            ]
        },
    ]

此处的Emp Info是一个数组,其中包含另一个薪水数组。 我想过滤所有价值3000的薪水。所以我的输出应如下所示

comapany : XYZ
Emp Info:[
            {
                empName: A,
                empID:1
                salary[
                    {
                        year: 2017,
                        value: 3000
                    }
                ]
            },
            {
                empName: B,
                empID:2
                salary[
                    {
                        year: 2018,
                        value: 3000
                    }
                ]
            },
        {
            empName: C,
            empID:3
            salary[
                {
                    year: 2017,
                    value: 3000
                }
            ]
        },
    ]

我已经使用lodash尝试了多种方法,但是它总是返回所有数据(而不是过滤)。

._filter(data, data => {
     return data.empInfo.salary[0].value === 3000
});

._each(data.empInfo.salary, data => {
     _.filter(data, d=>{
        return d.salary === 3000;
     });
});

._filter(data.empInfo.salary, data => {
    _.each(salary, s => {
        return s === 3000;
    });
});

有人可以最好使用lodash来帮助过滤此json

1 个答案:

答案 0 :(得分:1)

let newEmpInfo = empInfo.map( info => {
   return { ... info, salary: info.salary.filter( salary => salary.value === 3000 )};
});

这是最简单的方法,不需要lodash。 JS中的简单数组操作。

作为一个旁注,您应该下次添加编码尝试,就像通常在SO中出现的这类问题,人们只是来这里,以便我们解决他们的问题是不受欢迎的,并且通常会引起很多反对。