如何在 Ionic 4 中搜索多个项目?

How to search through multiple items in Ionic 4?

我有一个显示多个任务的卡片列表。

html

<ion-toolbar>
  <ion-searchbar [(ngModel)]="searchTerm" (ionChange)="setFilteredItems()" showCancelButton="focus"></ion-searchbar>
</ion-toolbar>

<ion-card *ngFor="let data of list let i = index">
  <ion-card-header>
    <ion-card-title  class = "linkCenter">{{data.Task}}</ion-card-title>
  </ion-card-header>

  <ion-card-content>
    <p>Status: <span style="color:#222428;" >{{data.StatusName}}</span></p>
    <p>Date: <span style="color:#222428;" >{{data.Date}}</span></p>
    <p>Auditors: <span style="color:#222428;" ><br><b>{{data.Auditors}}</b></span></p>
  </ion-card-content>
</ion-card>

我目前有搜索栏,可以使用以下代码搜索 data.Task

.ts

setFilteredItems() {
  this.list = this.filterItems(this.searchTerm);
}

filterItems(searchTerm: { toLowerCase: () => void; }) {
  return this.searchable.filter((item: { Task: { toLowerCase: () => { indexOf: (arg0: any) => number; }; }; }) => {
    return item.Task.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1;
  });
}

我想要的是还可以搜索的能力

同时

data.StatusName,data.Date,data.Auditors,data.Task.

这可能吗,因为所有 post 和教程似乎只搜索一项。

让我们关注搜索算法部分。

我的方法是:

  1. Cast all searchables to strings
  2. Remove empty space or regular characters
  3. Concatenate all searchables to form 1 long string to represent that item for searching "hayStack"
  4. Change case of needle and hayStack to lowercase
  5. Search for needle in hayStack

然后我们可以使用以下内容搜索您的 searchables

setFilteredItems() {
  this.list = this.filterItems(this.searchTerm);
}

filterItems(needle: string) {
  return this.searchable.filter(item => {
    // assuming all these data are string type
    const hayStack: string = (item.Task + item.StatusName + item.Date + item.Auditors).split(' ').join('').toLowerCase();

    needle = needle.split(' ').join('').toLowerCase();

    return hayStack.includes(needle);
  });
}