如何在React中实现字符串数组的无序匹配搜索?
实现无序词匹配的搜索功能
要实现无需严格顺序的搜索,核心思路是把用户输入的搜索词拆分成单个词语,然后检查目标条目是否包含所有这些词语(不要求顺序)。以下是修改后的代码和关键说明:
修改后的App.js代码
import { useState } from "react"; import { Data } from "./data"; import "./App.css"; import Table from "./Table"; function App() { const [query, setQuery] = useState(""); const search = (data) => { // 拆分搜索词为数组,过滤掉空字符串(处理多空格情况) const searchTerms = query.trim().split(/\s+/).filter(term => term); // 如果没有搜索词,直接返回全部数据 if (searchTerms.length === 0) return data; return data.filter((item) => { const lowerItem = item.toLowerCase(); // 检查当前条目是否包含所有搜索词 return searchTerms.every(term => lowerItem.includes(term)); }); }; return ( <div className="app"> <h1>Search Something</h1> <div className="searchBoxes"> <input className="search" placeholder="Search Array..." onChange={(e) => setQuery(e.target.value.toLowerCase())} /> </div> <Table data={search(Data)} /> </div> ); } export default App;
关键改动说明
- 拆分搜索词:用
split(/\s+/)按任意数量的空格拆分输入内容,再用filter去掉空字符串,避免用户输入空格导致的无效匹配。 - 多词匹配逻辑:使用
every方法替代原来的includes,要求目标条目必须包含所有拆分后的搜索词,不管这些词在条目中的顺序。 - 冗余代码清理:删掉了没用的
keys数组,简化逻辑。
效果验证
现在搜索The quick fox jumps lazy dog时,系统会检查条目是否同时包含the、quick、fox、jumps、lazy、dog这些词,因此能匹配到那条包含狐狸的句子。
内容的提问来源于stack exchange,提问作者JohnA
相关产品推荐
相关产品推荐

