我有一个对象数组,我正在根据属性名称“用户名”对其进行过滤,如下所示。
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);
}
一切正常,但现在我想过滤对象中“roles”数组中的属性名称“name”。例如,我想返回一个“roles”数组包含“name”= agent3 的对象,因此它应该返回位于我的示例中最后一个的整个对象。我尝试过像
return agents.filter(e => e.roles.filter(ee =>
ee.valueToSearch.toLowerCase()) !== -1));
但是没有成功。
这是dmeo https://stackblitz.com/edit/angular-txchxs?embed=1&file=src/app/agentFilter.pipe.ts
最佳答案
根据您在问题中给出的示例,我能够像这样更改您现有的功能,我希望这是您的要求..
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;
}
})
})
}
工作中的 Stackblitz:https://stackblitz.com/edit/angular-uzgni7
关于arrays - 如何跨嵌套数组过滤 JSON 对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55097240/