Ionic 3 pipe для фильтрации списка, сравнивая 2 массива - PullRequest
0 голосов
/ 11 сентября 2018

Мне нужна помощь, чтобы написать компонент фильтра PIPE, который будет фильтровать и отображать только сообщения о вакансиях, которые содержат выбранные слова из массива поиска. Найден способ возврата с использованием 1 поискового значения, но мне нужно, чтобы он возвращал несколько результатов поиска в массиве

jobCategory=['admin','clerk','driver','labour','helper']
selectedCategory=['driver','helper']

HTML:

<ion-item *ngFor="let posting of (postingList | postingFilter:'jobCategory':selectedCategory)"  >

PIPE:

export class PostingFilterPipe implements PipeTransform { 
transform(items: any[], field : string, value : string): any[] {  
  if (!items) return [];
  if (!value || value.length == 0) return items;
  return items.filter(it => {
    for (let index = 0; index < value.length; index++) {
      const element = value[index]; ***STUCK***
    }

  });
}

}

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Интересно, нужен ли вообще аргумент / параметр поля в этом случае?Я не проверял это, но я бы попытался передать массив выбранных категорий в качестве аргумента.Затем попробуйте использовать Array.include (), чтобы получить только те категории работ, которые были выбраны (находятся в выбранном массиве категорий).

Надеюсь, это поможет :) Дайте мне знать, если вы не это имели в виду.

jobCategory=['admin','clerk','driver','labour','helper']
selectedCategory=['driver','helper']

ТРУБА:

export class PostingFilterPipe implements PipeTransform { 
  // items => array to filter through
  // field => field name (not needed??)
  // array of selected categories
  transform(items: any[], field : string, selectedValues: string[]): any[] {  
    if (!items) return [];
    if (!value || value.length == 0) return items;

    return items.filter(item => {
      return value.includes(item);
    });
  }
}

HTML:

<ion-item *ngFor="let posting of (postingList | postingFilter:selectedCategory)"  >
0 голосов
/ 11 сентября 2018

Вы можете попробовать что-то вроде этого:

export class PostingFilterPipe implements PipeTransform { 
  transform(items, field : string, value): any[] {  
    if (!items) return [];
    if (!value || value.length == 0) return items;
    return items.filter(it => value.filter(val => it[field].includes(val)).length > 0)
  });
}
...