JavaScript数组过滤嵌入式对象数组
如何过滤嵌入对象数组的数组? 我使用过滤器和一些,但结果不是我的想法JavaScript数组过滤嵌入式对象数组,javascript,arrays,filter,Javascript,Arrays,Filter,如何过滤嵌入对象数组的数组? 我使用过滤器和一些,但结果不是我的想法 var data = [ { "app": "mail", "scenarios": [ { "name": "", "description": "plugin 1", "contacts": [ { "resourceId": "001", "isPrimary": false
var data = [
{
"app": "mail",
"scenarios": [
{
"name": "",
"description": "plugin 1",
"contacts": [
{
"resourceId": "001",
"isPrimary": false
}
]
},
{
"name": "app2",
"description": "plugin 2",
"contacts": [
{
"resourceId": "002",
"isPrimary": false
}
]
}
]
},
{
"app": "mail2",
"scenarios": [
{
"name": "app1",
"description": "plugin 1",
"contacts": [
{
"resourceId": "001",
"isPrimary": false
}
]
},
{
"name": "app2",
"description": "plugin 2",
"contacts": [
{
"resourceId": "002",
"isPrimary": false
}
]
}
]
}
];
result = data.filter(app => app.scenarios.some(scenario => scenario.contacts.some(concact => concact.resourceId == '001')));
我想将数据过滤到
[
{
"app": "mail",
"scenarios": [
{
"name": "",
"description": "plugin 1",
"contacts": [
{
"resourceId": "001",
"isPrimary": false
}
]
}
]
},
{
"app": "mail2",
"scenarios": [
{
"name": "app1",
"description": "plugin 1",
"contacts": [
{
"resourceId": "001",
"isPrimary": false
}
]
}
]
}
]
var数据=[{app:mail,场景:[{name:,描述:插件1,联系人:[{resourceId:001,isPrimary:false}]},{name:app2,描述:插件2,联系人:[{{resourceId:002,isPrimary:false}]}},{app:mail2,场景:[{name:app1,描述:插件1,联系人:[{resourceId:001,isPrimary:false}]}},{name:app2,描述:插件2,联系人:[{resourceId:002,isPrimary:false}]}]};
结果=data.filterapp=>app.scenarios.somescenario=>scenario.contacts.someconact=>conact.resourceId=='001';
console.logresult;
风险值数据=[
{
应用程序:mail,
场景:[
{
姓名:,
说明:插件1,
联系人:[
{
资源ID:001,
一级:假
}
]
},
{
名称:app2,,
说明:插件2,
联系人:[
{
资源ID:002,
一级:假
}
]
}
]
},
{
app:mail2,
场景:[
{
名称:app1,,
说明:插件1,
联系人:[
{
资源ID:001,
一级:假
}
]
},
{
名称:app2,,
说明:插件2,
联系人:[
{
资源ID:002,
一级:假
}
]
}
]
}
];
data.forEachdat=>{
dat.scenarios=dat.scenarios.findda=>da.contacts.findx=>x.resourceId==001;
};
console.logdata我认为您需要同时过滤场景数组和联系人数组。如果您希望获得一个场景,其中至少有一个联系人的resourceId==001,您可以执行以下操作 让数据=[ { 应用程序:mail, 场景:[ { 姓名:, 说明:插件1, 联系人:[ { 资源ID:001, 一级:假 } ] }, { 名称:app2,, 说明:插件2, 联系人:[ { 资源ID:002, 一级:假 } ] } ] }, { app:mail2, 场景:[ { 名称:app1,, 说明:插件1, 联系人:[ { 资源ID:001, 一级:假 } ] }, { 名称:app2,, 说明:插件2, 联系人:[ { 资源ID:002, 一级:假 } ] } ] } ]; forlet数据项{ item.scenarios=item.scenarios.filtervalue=>{ 让validContacts=value.contacts.filtercontact=>{ return contact.resourceId==001; } 返回validContacts.length>0; } }
console.logdata;这是可行的,但联系人可能是一个对象数组,因此使用da.contacts[0]我认为不适合这种情况。@user3206091:已更新,请检查,基本上不使用索引0,而是对其应用查找函数