我正在尝试按职位类型,职位标签(嵌套数组)和职位付款过滤职位列表。 我有一个包含工作类型和工作标签的复选框列表,以及两个包含最低工资和最高工资的输入
目前,我只能过滤具有多个复选框值的工作类型,但无法过滤工作标签,也不能过滤工资
我在这里尝试了此解决方案: Filtering array of objects with arrays based on nested value
那没用
我的工作对象:
{
"jobTitle" :"Whatever",
"jobDescription" : "",
"jobType" : "EXTRA", // Job Type can be either EXTRA or FULL
"jobPayement" : 5,
"tags" : ["RESTAURANT","EVENT"], //Job Tags are defined with 4 categories RESTAURANT / EVENT / COFFEE / HOTEL
"xpOnly" : true,
"image" : "kitchen.png",
}
我的过滤器项(复选框):
this.filterItems = [
{
value: 'Coffee',
checked: false
},
{
value: 'Event',
checked: false
},
{
value: 'Hotel',
checked: false
},
{
value: 'Restaurant',
checked: false
},
{
value: 'FULL',
checked: false
},
{
value: 'EXTRA',
checked: false
},
];
过滤条件和ng
<a *ngFor="let job of jobs | fresh: { jobType: ''} : checked();let i = index">
我的过滤器管道:
@Pipe({
name: 'fresh'
})
export class FreshPipe implements PipeTransform {
transform(items: any, filter: any, filterItems: Array<any>, isAnd: boolean): any {
console.log('Filtering ..');
if (filter && Array.isArray(items) && filterItems) {
let filterKeys = Object.keys(filter);
let checkedItems = filterItems.filter(item => { return item.checked; });
if (!checkedItems || checkedItems.length === 0) { return items; }
if (isAnd) {
return items.filter(item =>
filterKeys.reduce((acc1, keyName) =>
(acc1 && checkedItems.reduce((acc2, checkedItem) => acc2 && new RegExp(item[keyName], 'gi').test(checkedItem.value) || checkedItem.value === "", true))
, true)
);
} else {
return items.filter(item => {
return filterKeys.some((keyName) => {
return checkedItems.some((checkedItem) => {
return new RegExp(item[keyName], 'gi').test(checkedItem.value) || checkedItem.value === "";
});
});
});
}
} else {
return items;
}
}
}
checked() {
return this.filterItems.filter(item => { return item.checked; });
}
就像我说的那样,现在我只对Job Type进行过滤,如果我们能找到一种解决方案来过滤标签和薪水,那将是很棒的。我可以提供任何其他信息 谢谢您的帮助。