Как я могу отфильтровать (с помощью нескольких комбинаций) данные таблицы?

#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. Я добавил дурака стакблитца