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

时间:2019-05-28 11:13:46

标签: 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">

4 个答案:

答案 0 :(得分:0)

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

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())) ;
      });
  }

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

答案 1 :(得分:0)

您可以尝试使用||运算符,具有与以下相同的return语句:

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()));
});

答案 2 :(得分:0)

例如,您可以尝试将条件与或组合。

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());
      });

  }

答案 3 :(得分:0)

尝试:

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

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