我有一个列出约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
函数,但是我认为这种方式更具可读性。