фильтр угловых массивов применяет несколько - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть следующие данные:

   tasks=  [
        {
        "id":8,
        "title":"Eight",    
        "how_often":"DS",
        "how_important_task":"",
        "how_important_improvement":"",
        "stakeholder":2,
        "project":2
        },

        {
        "id":9,
        "title":"Nine",
        "how_often":"",
        "how_important_task":"",
        "how_important_improvement":"",
        "stakeholder":2,
        "project":2
        },

        {
        "id":21,
        "title":"Seventeen",
        "how_often":"",
        "how_important_task":"",
        "how_important_improvement":"",
        "stakeholder":2,
        "project":2
        }
    ]

У меня есть две модели и метод в моем компоненте:

  public how_important_task: string= "";
  public how_often: string = "";

  applyFilters(){
    this.tasks = this.tasks.filter(task => {})
  }

И шаблон с фильтрами и списком:

<ion-select [(ngModel)]="how_often" (ionChange)="applyFilters()">
                <ion-option value="">None</ion-option>
                <ion-option *ngFor="let frequency of filer_per_frequency" value="{{frequency.value}}">{{frequency.title}}</ion-option>
              </ion-select>
<ion-select [(ngModel)]="how_important_task" (ionChange)="applyFilters()">
                <ion-option *ngFor="let importance of filer_per_importance" value="{{importance.value}}">{{importance.title}}</ion-option>
              </ion-select>

...



<ion-list>
        <button detail-none (click)="expandItem(task)" ion-item *ngFor="let task of tasks">

          <h2>{{task.title}}</h2>
          <expandable [expandHeight]="itemExpandHeight" [expanded]="task.expanded">
            <hr><p>{{task.how_often | fullform}}</p>
            <p>{{task.how_important_task | fullform}}</p>
            <p>{{task.why_perform_task}}</p>
            <p>{{task.sequence_of_actions}}</p>
          </expandable>
        </button>
      </ion-list>

В моем методе я хочу применить все выбранные фильтры к моим задачам. Как мне этого добиться?

1 Ответ

0 голосов
/ 30 апреля 2018

Я попытался помочь. Вам необходимо сначала создать копию исходного массива. Я не включил это, но я предполагаю, что вы скопировали это куда-то в переменную с именем original_tasks. После этого это простой Array.filter вызов. Если оба определены, они оба должны совпадать. Обратите внимание, что если how_important_task или how_often может быть значением, которое будет означать "неправдивое", вам необходимо обновить оператор if, чтобы учесть это.

this.tasks = this.original_tasks.filter(task => {

     if(this.how_important_task && this.how_often){
          return task.how_important_task === this.how_important_task &&  task.how_often === this.how_often
     }

     if(this.how_important_task){
         return task.how_important_task === this.how_important_task;
     }

     if(this.how_often){
         return task.how_often === this.how_often;
     }

     return true;
});
...