我有一个列出约3000个对象的json文件。每个对象都是一个机场。我想创建一个函数,用户可以通过输入名称来过滤出一个机场。

这就是我想出的

<input (keyup)="searchAirport(searchquery)" [(ngModel)]="searchquery" id="searchAirport"/>
<span>{{searchedAirport}}</span>


零件

searchedAirport: string;

this.http.request('/assets/resources/airportsraw.json')
  .map(res => res.json())
  .subscribe(data => {
      this.airportsArray = data;
  });

searchAirport(value) {
  for (const i of this.airportsArray) {
    if (value === i.name ) {
      this.searchedAirport = i.name;
    }
  }
}


这确实会返回正确的Aiport名称,但它有2个缺点。仅在使用大写字母进行搜索时才有效。因此barcelona不会返回任何内容,但Barcelona会返回任何内容。

第二个缺点是它仅在值完全等于机场名称时返回。

如何根据部分搜索返回值?那么Bar而不是Barcelona,我怎么能解决资本问题呢?

最佳答案

我会尝试这样的事情:

const findMatches = (values) => test => {
  const regex = new RegExp(test, 'i');
  return values.filter(val => regex.test(val.name))
}

const searchAirports = findMatches(airports);


显然,您可以内嵌findMatches函数,但是我认为这种方式更具可读性。

10-06 02:53