基于多个条件的javascript对象过滤器

基于多个条件的javascript对象过滤器,javascript,arrays,node.js,object,ecmascript-6,Javascript,Arrays,Node.js,Object,Ecmascript 6,我有以下对象,我想根据一些属性对其进行过滤,并只输出其中的一些部分 { "email" : "john.doe@acme.com", "name" : " John Doe", "groups" : [ { "name" : "group1", "country": "US", "contacts" : [ { "localId" : "c1", "ad

我有以下对象,我想根据一些属性对其进行过滤,并只输出其中的一些部分

{
    "email" : "john.doe@acme.com",
    "name" : " John Doe",
    "groups" : [
        {
            "name" : "group1",
            "country": "US",
            "contacts" : [
                { "localId" : "c1", "address" : "some address 1" },
                { "localId" : "c2", "address" : "some address 2" },
                { "localId" : "c3", "address" : "some address 3" }
            ]
        },
        {
            "name" : "group2",
            "country": "Canada",
            "contacts" : [
                { "localId" : "c1", "address" : "some address 1" },
                { "localId" : "c3", "address" : "some address 3" }
            ]
        }
    ]
}
结果应该如下所示:

{
    "email" : "john.doe@acme.com",
    "name" : " John Doe",
    "groups" : [
        {
            "name" : "group1",
            "country": "US",
            "contacts" : [
                {
                  "localId" : "c3", 
                  "address" : "some address 3" 
                }
            ]
        }
    ]
}
因此,我的条件是:

groups.name="group1"
groups.contacts.localId="c3"
如何使用一些ecma6 js函数实现它?用最少的内存负载?我在nodejs env=8.9.0

更新: 以下是我失败的尝试:

const conditions = {"groups.name": "group1", "groups.contacts.localId": "c3"};
let res = mylist.map((i)=>{
  return {
      email: i.email,
      name: i.name,
      groupsName: conditions.groups.name
  }

})

您可以使用
filter
map
。如果
obj
是您的初始对象,则您可以执行以下操作:

obj.groups = obj.groups.filter((g)=>g.name==="group1")
for(int i = 0; i < obj.groups.length;i++)
{
    obj.groups[i].contacts = obj.groups[i].contacts.filter((c)=>c.localId==="c3"))
}
obj.groups=obj.groups.filter((g)=>g.name==“group1”)
for(int i=0;ic.localId==“c3”))
}

使用
filter()
可以非常简洁地完成此操作。如果先筛选组名,则不会浪费时间筛选联系人:

让obj={
“电子邮件”:“约翰。doe@acme.com",
“姓名”:“约翰·多伊”,
“团体”:[{
“名称”:“组1”,
“国家”:“美国”,
“联系人”:[{
“本地化”:“c1”,
“地址”:“某些地址1”
},
{
“本地化”:“c2”,
“地址”:“某些地址2”
},
{
“本地化”:“c3”,
“地址”:“某些地址3”
}
]
},
{
“名称”:“组2”,
“国家”:“加拿大”,
“联系人”:[{
“本地化”:“c1”,
“地址”:“某些地址1”
},
{
“本地化”:“c3”,
“地址”:“某些地址3”
}
]
}
]
}
设newObj={
“电子邮件”:obj.email,
“名称”:对象名称,
“组”:obj.groups.filter(item=>item.name==“group1”).map(g=>(g.contacts=g.contacts.filter(c=>c.localId==“c3”),g))
}

console.log(newObj)
请显示您尝试过的内容。Stackoverflow不是免费的代码编写服务。目的是帮助您修复您的问题code@charlietfl请在我尝试失败的情况下查看更新的问题。过滤器/映射行末尾的
逗号g
是什么?您好@Bonnard,这是逗号运算符。它使g成为映射的返回值。详情如下: