You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:35:40