我正在尝试使用表单的四个字段过滤对象数组。所有四个字段都是可组合的。
这四个字段是:2 个带有多项选择的下拉菜单和 2 个文本框。
当我单击一个按钮时,我必须根据所选字段过滤数据。这是我单击搜索按钮时调用的方法:
filterData(form: NgForm) {
if (this.gridValueClone) {
const filterType = form.value.selectedItemsType;
const filterCompany = form.value.selectedItemsCompany;
const filterDescription = form.value.description;
const filterNameFile = form.value.nameFile;
if (filterType.length > 0 || filterCompany.length > 0 || filterDescription || filterNameFile) {
let search;
let arrFilter = [];
if (filterType.length > 0) {
arrFilter.push({
"field": "type",
"value": filterType
});
}
if (filterCompany.length > 0) {
arrFilter.push({
"field": "company",
"value": filterCompany
});
}
if (filterDescription) {
arrFilter.push({
"field": "description",
"value": filterDescription
});
}
if (filterNameFile) {
arrFilter.push({
"field": "name",
"value": filterNameFile
});
}
const results = this.gridValueClone.filter(data=> {
arrFilter.forEach(filter => {
search = data[filter.field] === filter.value;
});
return search;
});
if (results) {
this.reportsGridValue = results;
} else {
this.reportsGridValue = [];
}
}
}
}
正如我所拥有的,它可以与文本框(描述和文件名)的过滤器一起正常工作,您可以选择一个框或将它们组合并很好地过滤。
但是我不知道如何合并多个选择过滤器(类型和公司),下面我将举例说明如果我选择了应该进行搜索的所有过滤器时获得的对象:
arrFilter = [
{
"field":"type",
"value":[
"Type1",
"Type2",
"Type3",
"Type4"
]
},
{
"field":"company",
"value":[
"CompanyA",
"CompanyB"
]
},
{
"field":"description",
"value":"Prueba"
},
{
"field":"name",
"value":"Prueba.txt"
}
]
有什么建议吗?谢谢你。
只需根据是否filter.value
为数组调用正确的逻辑。
这应该有效:
const results = this.gridValueClone.filter(data =>
arrFilter.every(filter =>
Array.isArray(filter.value)
? filter.value.includes(data[filter.field])
: filter.value === data[filter.field]
)
);
您forEach()
在过滤器回调中的使用有点不稳定,所以我摆脱了它并用对every()
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句