Создайте пользовательский фильтр, используя FilterPredicate для фильтрации источника данных - PullRequest
0 голосов
/ 04 октября 2019

Я использую источник данных для хранения всех своих данных. До сих пор я использовал стандартный фильтр при выполнении поиска. Однако теперь я хотел бы выполнить поиск с оператором «ИЛИ».

Пример:

{name : john, age : 25, work : driver}

{name : peter, age : 28, work : writer}

{name : james, age : 39, work : athlete}

Если я введу "Джон Джеймс", я хочу, чтобы функция фильтра вывела меня на строку 1 и строку 3.

Я почти уверен, что мыЯ должен использовать filterPredicate, но я действительно не понимаю, как их создать / использовать, и я не смог найти ни одного достойного / рабочего примера

Документация не сильно помогла бы, кроме как дать мне прототип:

filterPredicate: ((data: T, filter: string) => boolean);

Ребята, у вас есть идея или пример кода, как этого добиться?

Вот как выглядит моя функция для базового поиска:

  applyFilter(filterValue: string) {
    filterValue = filterValue.toLowerCase();
    this.dataSource.filter = filterValue;
  }

1 Ответ

0 голосов
/ 04 октября 2019
const users = [
  {name : 'john', age : 25, work : 'driver'},
  {name : 'peter', age : 28, work : 'writer'},
  {name : 'james', age : 39, work : 'athlete'}
]

const query = "john james";

const filtered = users.filter(e => query.includes(e.name));

Это должно работать :)

с использованием источника данных:

this.dataSource.filterPredicate = (data, filter) => filter.includes(data.name)
...