在同一搜索框中按多个数组对象属性进行搜索

  • 本文关键字:搜索 对象 数组 属性 angular
  • 更新时间 :
  • 英文 :

searchTerm: any;
search() {
      this.records = this.records.filter((res: any)=>{
        return res.name.toLocaleLowerCase().match(this.searchTerm.toLocaleLowerCase());
      });
  }

我正在使用名称制作搜索词,该名称是记录数组中的属性或键。在同一个搜索框中,我还想按年龄和课程进行搜索。我怎样才能做到这一点。

<input type ="text" placeholder="search" (input)=" search();" [(ngModel)]="searchTerm">

只需展开搜索过滤器即可包含您的额外条件:

search() {
      this.records = this.records.filter((res: any)=>{
        return (res.name && res.name.toLocaleLowerCase().match(this.searchTerm.toLocaleLowerCase())) || 
        (res.course && res.course.toLocaleLowerCase().match(this.searchTerm.toLocaleLowerCase())) || 
        (res.age && res.age.toLocaleLowerCase().match(this.searchTerm.toLocaleLowerCase())) ;
      });
  }

这假定课程和年龄都是记录数组中的字符串。

您可以尝试使用 || 运算符,其返回语句如下:

this.records = this.records.filter((res: any)=>{
        return (res.name.toLocaleLowerCase().match(this.searchTerm.toLocaleLowerCase()) || res.age.match(this.searchTerm) || res.course.toLocaleLowerCase().match(this.searchTerm.toLocaleLowerCase()));
});

尝试:

search() {
    this.records = this.records.filter((res: any)=>{
      return Object.keys(res).some(item => {
        return item.toLocaleLowerCase().match(this.searchTerm.toLocaleLowerCase())
      });
    });
  }

这将搜索对象中的任何属性,并检查其值是否与条件匹配。它将在第一场比赛停止

您可以尝试将条件与 or 结合起来,例如这样。

search() {
      this.records = this.records.filter((res: any)=>{
        return (res.name.toLocaleLowerCase().match(this.searchTerm.toLocaleLowerCase() ||
            res.age.toLocaleLowerCase().match(this.searchTerm.toLocaleLowerCase() ||
            res.course.toLocaleLowerCase().match(this.searchTerm.toLocaleLowerCase());
      });
  }

最新更新