Arrays 如何在嵌套数组中过滤JSON对象数组
我有一个对象数组,并根据属性名“username”对其进行过滤,如下所示Arrays 如何在嵌套数组中过滤JSON对象数组,arrays,json,angular,typescript,Arrays,Json,Angular,Typescript,我有一个对象数组,并根据属性名“username”对其进行过滤,如下所示 array = [{ "id": 1, "username": "admin", "roles": [{ "name": "Administrator" }, { "name": "agent" } ] }, { "id": 2, "username": "admin2",
array = [{
"id": 1,
"username": "admin",
"roles": [{
"name": "Administrator"
},
{
"name": "agent"
}
]
},
{
"id": 2,
"username": "admin2",
"roles": [{
"name": "Administrator2"
},
{
"name": "agent2"
}
]
},
{
"id": 3,
"username": "admin3",
"roles": [{
"name": "Administrator3"
},
{
"name": "agent3"
}
]
}
]
过滤函数是这样的
transform(array: any, valueToSearch: string): any[] {
return array.filter(e =>
e.username.toLowerCase().indexOf(valueToSearch.toLowerCase())
!== -1);
}
一切正常,但现在我想根据对象中“角色”数组中的属性名“name”进行筛选。例如,我想返回一个对象,其“roles”数组包含“name”=agent3,因此它应该返回位于示例中最后一个位置的整个对象。我试着
return agents.filter(e => e.roles.filter(ee =>
ee.valueToSearch.toLowerCase()) !== -1));
但它不起作用
这是dmeo
myarray=[{
“id”:1,
“用户名”:“管理员”,
“角色”:[{
“名称”:“管理员”
},
{
“名称”:“代理人”
}
]
},
{
“id”:2,
“用户名”:“admin2”,
“角色”:[{
“名称”:“管理员2”
},
{
“名称”:“代理2”
}
]
},
{
“id”:3,
“用户名”:“admin3”,
“角色”:[{
“名称”:“管理员3”
},
{
“名称”:“agent3”
}
]
}
];
函数myFunction(){
var filtered=myarray.filter((obj)=>{
返回obj.username.match(新的RegExp(document.getElementById('search')。值,'ig');
});
console.log(过滤);
};代码>
根据您在问题中给出的示例,我能够像这样更改您现有的功能,我希望这是您的要求
ngOnInit() {
this.transform(this.array,'agent3');
}
transform(array: any, valueToSearch: string): any[] {
return this.array.filter(e => {
e.roles.filter(ee => {
if(ee.name.toLowerCase() === valueToSearch.toLowerCase() ) {
console.log(e);
this.finalResult = e;
}
})
})
}
Working Stackblitz:在您前面提到的示例中,valueToSearch
参数值是否为agent3
?您的代码工作正常,但我想要一个过滤场景,而不是搜索场景,它只在整个单词匹配时返回对象。但我希望当用户键入一个单词时,它会开始比较并返回场景i中的适当值need@RazaEllahi,这是否是您的期望值??如果您键入username,它将过滤数据并显示与username相关的对象。我想在“角色”数组中按“名称”属性搜索我需要的场景