#angular #typescript #filter
Вопрос:
у моего углового проекта есть проблема. У меня есть 4 поля выбора, в которых вы выбираете различные фильтры:
- офисный работник
- название проекта
- работник
- деятельность
Моя проблема в том, что мне трудно предсказать все возможные комбинации фильтров, например: сотрудник-название проекта, тип сотрудника, деятельность сотрудника … и многое другое.
Я пробовал использовать фильтры, но, похоже, они не дают мне правильных данных.
entities: Activity[],
{ query, employee, type, project, date_from, date_to }: { query: string, employee: string[] , type : string[], project: string[],date_from: Date, date_to: Date },
): Activity[] {
return employee || type|| project?
entities.filter(e =>
employee?.indexOf(`${e.employee.firstName.toLowerCase()} ${e.employee.lastName.toLowerCase()}`)>-1
).filter(e => {type?.indexOf(`${e.type.name.toLowerCase()}`)>-1})
:entities
}
Это подход, который я пытаюсь применить, чтобы, если массив (например, используемый) пуст, выполнялась следующая фильтрация (по типу).
Комментарии:
1. Вы действительно используете Angular 1.x? Вот как вы отметили этот вопрос…
2. извините, я обновил. я использую последнюю угловую версию.
Ответ №1:
В общем случае вы можете создать объект filterObject
filter={officeWorker:..,projectName:..,employed:...,activities:..}
Свойство может быть пустым или иметь значение, тогда вы просто используете способ (!filter.property || x.property.indexOf(filter.property)>-1) amp;amp;
this activitiesFiltered=this.activities.filter(x=>{
(!filter.officeWorker || x.officeWorker.toLowerCase().indexOf(filter.officeWorker)>-1) amp;amp;
(!filter.projectName|| x.projectName.toLowerCase().indexOf(filter.projectName)>-1) amp;amp;
....
})
Я выставляю дураком стакблитца
Комментарии:
1. ммм, нет, таким образом, он будет искать только в том случае, если я заполню все поля выбора.
2. Я добавил дурака стакблитца