React Native如何实现仅匹配输入前缀的单词搜索功能
React Native 单词搜索前缀匹配调整方案
原有逻辑的问题
当前过滤判断用listItem.indexOf(textData) > -1,只要单词任意位置包含输入文本就会被返回,属于全量包含匹配,不符合“仅匹配单词前缀”的需求。
调整方式
仅需修改过滤环节的匹配判断规则,两种可直接使用的实现:
- 调整
indexOf判断阈值:将匹配条件从“出现位置大于-1”改为“出现位置严格等于0”,即输入文本必须位于单词最起始位置才会被匹配,对应代码为return listItem.indexOf(textData) === 0; - 采用字符串原生
startsWith方法:语义更清晰,专门用于判断字符串是否以指定内容开头,代码可读性更高,对应代码为return listItem.startsWith(textData);
调整后的完整函数
searchFilter = (text) => { const newData = dizi.filter((item) => { const listItem = item.name.toLowerCase(); const textData = text.toLowerCase().trim(); return listItem.startsWith(textData); }); this.setState({ diziler: newData, }); };
效果适配说明
- 当搜索输入为空时,
startsWith('')会自动返回true,和原有交互逻辑保持一致,不会出现空输入清空列表的异常 - 增加的
trim()处理可过滤用户误输的前后无效空格,避免无效空格导致匹配结果异常 - 调整后匹配逻辑完全对齐需求示例:输入对应首字母前缀时,仅返回同前缀的单词,不会返回非前缀位置包含输入文本的条目
内容的提问来源于stack exchange,提问作者kikirim
相关产品推荐
相关产品推荐

