使用Regex在React-Native中比较两个字符串

问题描述 投票:0回答:1

所以我已将此数据存储在状态中:

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,然后依次过滤位置并仅返回匹配名称,这种作品,但我一直得到错误的结果。

例如:对于a searchQuery cafe,我应该得到结果Cafe LolaCafe 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 CasinoCaesars Palace Las Vegas Hotel & CasinoCafe Americano Cafe Lola,如果我像Cafe一样完成了searchQuery,结果就是Bellagio Hotel and Casino Caesars Palace Las Vegas Hotel & Casino

javascript regex react-native string-comparison
1个回答
0
投票

[当我用纯Javascript表达您的示例时,过滤器将按预期工作。您确定问题不在其他地方吗?

var state = {
    locations:[
            {name:"Bellagio Hotel and Casino"},
            {name:"Caesars Palace Las Vegas Hotel & Casino"},
            {name:"Cafe Americano"},
            {name:"Cafe Lola"},
            {name:"Hotel Apache"},
        ],
   searchQuery:"Cafe"
}

var filter = new RegExp(state.searchQuery.toLowerCase())
var results = state.locations.filter((location, index) => filter.test(location.name.toLowerCase()))
.map((location) => (`<Text>${location.name}</Text>)`));
console.log(results);

编辑:这本身不是答案,但是我认为我不能在评论中使用与此片段相同的东西。

© www.soinside.com 2019 - 2024. All rights reserved.