, поэтому я храню эти данные в состоянии:
state={
locations:[
{name:"Bellagio Hotel and Casino"},
{name:"Caesars Palace Las Vegas Hotel & Casino"},
{name:"Cafe Americano"},
{name:"Cafe Lola"},
{name:"Hotel Apache"},
],
searchQuery:""
}
Я отображаю это так:
var filter = new RegExp(this.state.searchQuery.toLowerCase())
this.state.locations.filter((location,index) => filter.test(location.name.toLowerCase()))
.map((location)=>(<Text>{location.name}</Text>))
при первом запуске фильтр равен this.state.searchQuery = ""
и все отображаются местоположения, где-то в коде у меня есть поле поиска, которое начинает постоянно меняться this.state.searchQuery
, так как вы продолжаете печатать, который затем, в свою очередь, должен фильтровать местоположения и возвращать только совпадающие имена, этот вид работ, но я продолжаю получать неправильные результаты .
Например: для запроса search cafe
я должен получить результаты Cafe Lola
и Cafe Americano
, но в настоящее время я получаю Bellagio Hotel and Casino
Как я могу искать и фильтровать через данные с правильными результатами? или если есть другие способы сделать это без использования Regex
, я также попробовал:
1-location.name.toLowerCase().localeCompare(this.state.searchQuery.toLowerCase()) !== -1
2-location.name.toLowerCase().search(this.state.searchQuery.toLowerCase()) !== -1
3-location.name.toLowerCase().indexOf(this.state.searchQuery.toLowerCase()) !== -1
все они с неточными результатами. с первым searchQuery Ca
дает мне Bellagio Hotel and Casino
Caesars Palace Las Vegas Hotel & Casino
Cafe Americano
Cafe Lola
, и если я заканчиваю sh поискового запроса, например Cafe
, результаты просто Bellagio Hotel and Casino
Caesars Palace Las Vegas Hotel & Casino