基于多个条件的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成为映射的返回值。详情如下: