当前位置:首页 > JavaScript

js实现模糊搜索

2026-03-01 04:50:42JavaScript

实现模糊搜索的基本思路

模糊搜索的核心是通过字符串匹配算法,找到与用户输入关键词相似的内容。常见方法包括字符串包含检查、正则表达式匹配或使用第三方库实现更复杂的算法(如Levenshtein距离)。

使用字符串包含检查

通过 String.prototype.includes()String.prototype.indexOf() 检查目标字符串是否包含用户输入的关键词。这种方法简单但区分大小写,通常需要转为统一大小写。

js实现模糊搜索

const data = ["apple", "banana", "orange", "grape"];
const keyword = "ap";

const results = data.filter(item => 
  item.toLowerCase().includes(keyword.toLowerCase())
);
console.log(results); // ["apple"]

使用正则表达式匹配

正则表达式可以实现更灵活的模糊匹配,例如忽略大小写、部分匹配或通配符搜索。

const data = ["apple", "banana", "orange", "grape"];
const keyword = "a.*e";

const regex = new RegExp(keyword, "i"); // "i"表示不区分大小写
const results = data.filter(item => regex.test(item));
console.log(results); // ["apple", "grape"]

使用第三方库实现高级模糊搜索

若需要更复杂的模糊匹配(如拼写容错),可以使用 Fuse.js 等库。Fuse.js 支持权重、阈值配置和多种匹配模式。

js实现模糊搜索

import Fuse from "fuse.js";

const data = ["apple", "banana", "orange", "grape"];
const options = {
  includeScore: true,
  threshold: 0.4, // 匹配阈值,值越低越严格
};
const fuse = new Fuse(data, options);
const results = fuse.search("ap").map(item => item.item);
console.log(results); // ["apple"]

实现前端实时模糊搜索

结合输入框事件监听,动态过滤数据并展示结果。

<input type="text" id="searchInput" placeholder="Search...">
<ul id="results"></ul>

<script>
  const data = ["apple", "banana", "orange", "grape"];
  const input = document.getElementById("searchInput");
  const resultsContainer = document.getElementById("results");

  input.addEventListener("input", (e) => {
    const keyword = e.target.value.toLowerCase();
    const filtered = data.filter(item => 
      item.toLowerCase().includes(keyword)
    );
    resultsContainer.innerHTML = filtered
      .map(item => `<li>${item}</li>`)
      .join("");
  });
</script>

优化搜索性能

对于大数据集,可以通过以下方式优化性能:

  • 对数据建立索引(如使用 Fuse.js)。
  • 防抖(Debounce)输入事件,避免频繁触发搜索。
function debounce(func, delay) {
  let timeout;
  return function(...args) {
    clearTimeout(timeout);
    timeout = setTimeout(() => func.apply(this, args), delay);
  };
}

input.addEventListener("input", debounce((e) => {
  // 搜索逻辑
}, 300));

模糊搜索的扩展场景

  • 对象数组搜索:针对对象中的特定属性进行模糊匹配。
    const users = [{ name: "John" }, { name: "Jane" }];
    const results = users.filter(user => 
      user.name.toLowerCase().includes("jo")
    );
  • 拼音搜索:结合拼音库实现中文拼音模糊匹配。

标签: 模糊js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

vue实现模糊

vue实现模糊

Vue实现模糊搜索的方法 在Vue中实现模糊搜索功能,可以通过多种方式完成。以下是几种常见的方法: 使用JavaScript的filter和includes方法 <template>…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…