根据搜索词返回公司列表

时间:2018-09-09 05:15:09

标签: json angular

我正在创建一个模拟api,其中涉及查询json文件(包含公司对象)以获取特定名称,但是它一直返回null而不是匹配项。我怎样才能解决这个问题?我基于tutorial进行工作。

代码

  filterCompanies(searchTerm) {
    this.http.get('assets/data/companies.json').map(res => res).subscribe(data => {
      this.companies = data;
      return this.companies.filter((company) => {
        return company.name.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1;
      });
    });
  }

companies.json

[
  {
    "name": "one"
  },
  {
    "name": "two"
  },
  {
    "name": "three"
  },
  {
    "name": "four"
  },
  {
    "name": "five"
  }
]

4 个答案:

答案 0 :(得分:2)

不使用return即可直接分配值,

 this.companies = data.filter(t=>t.name.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1;

答案 1 :(得分:0)

已过滤的公司现在包含在“ this.comapnies”中,如果您要使用具有“ companies”成员的组件中的公司,则无需从filterCompanies函数中将其返回

答案 2 :(得分:-1)

过滤器不会修改其使用的变量,因此您必须将其分配回所需的变量

filterCompanies(searchTerm) {
    this.http.get('assets/data/companies.json').map(res => res).subscribe(data => {
      this.companies = data.filter((company) => {
        return company.name.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1;
      });
    });
}

答案 3 :(得分:-2)

您可以使用include来检查名称是否包含搜索字符串

this.companies = [];

this.companies = data.filter((company) => company.name.includes('searchtext'));

this.companies = data.filter((company) => company.name.toLowerCase().includes('searchtext'.toLowerCase()));