当前位置:首页 > VUE

vue实现拼音模糊搜索

2026-02-23 17:09:07VUE

实现思路

拼音模糊搜索的核心是将中文转换为拼音,并在搜索时匹配拼音或拼音首字母。需要借助第三方库将中文转换为拼音,并处理用户输入的搜索词。

安装拼音转换库

推荐使用 pinyin-propinyin 库。以 pinyin-pro 为例:

npm install pinyin-pro

核心代码实现

<template>
  <div>
    <input v-model="searchText" placeholder="输入搜索词" />
    <ul>
      <li v-for="item in filteredList" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

<script>
import { pinyin } from 'pinyin-pro';

export default {
  data() {
    return {
      searchText: '',
      originalList: [
        { id: 1, name: '苹果' },
        { id: 2, name: '香蕉' },
        { id: 3, name: '橙子' }
      ]
    };
  },
  computed: {
    filteredList() {
      if (!this.searchText.trim()) return this.originalList;

      const searchKey = this.searchText.toLowerCase();
      return this.originalList.filter(item => {
        // 获取完整拼音
        const fullPinyin = pinyin(item.name, { toneType: 'none' }).replace(/\s+/g, '');
        // 获取首字母
        const initials = pinyin(item.name, { pattern: 'first', toneType: 'none' }).replace(/\s+/g, '');

        return (
          item.name.includes(searchKey) || // 中文匹配
          fullPinyin.includes(searchKey) || // 全拼音匹配
          initials.includes(searchKey) // 首字母匹配
        );
      });
    }
  }
};
</script>

优化方案

对于大数据量的场景,可以预先计算拼音并缓存:

created() {
  this.enhancedList = this.originalList.map(item => ({
    ...item,
    fullPinyin: pinyin(item.name, { toneType: 'none' }).replace(/\s+/g, ''),
    initials: pinyin(item.name, { pattern: 'first', toneType: 'none' }).replace(/\s+/g, '')
  }));
},
computed: {
  filteredList() {
    return this.enhancedList.filter(item => 
      item.name.includes(this.searchText) ||
      item.fullPinyin.includes(this.searchText.toLowerCase()) ||
      item.initials.includes(this.searchText.toLowerCase())
    );
  }
}

高级功能扩展

实现拼音分词搜索(如"ping guo"匹配"苹果"):

vue实现拼音模糊搜索

// 在过滤逻辑中添加分词匹配
const searchKeys = this.searchText.toLowerCase().split(/\s+/);
return fullPinyin.includes(searchKeys.join('')) || 
       searchKeys.every(key => fullPinyin.includes(key));

注意事项

  1. 拼音库需要选择支持多音字处理的版本
  2. 搜索时建议统一转为小写比较
  3. 性能敏感场景建议使用Web Worker进行拼音计算
  4. 移动端可能需要考虑输入法联想词的兼容处理

标签: 拼音模糊
分享给朋友:

相关文章

实现模糊查询vue

实现模糊查询vue

实现模糊查询的方法 在Vue中实现模糊查询通常需要结合输入框和列表渲染,通过监听输入框的变化实时过滤数据。以下是几种常见的实现方式: 使用计算属性过滤数据 <template> &l…

vue模糊查询怎么实现

vue模糊查询怎么实现

Vue模糊查询实现方法 在Vue中实现模糊查询通常结合输入框和列表过滤功能,以下是几种常见方法: 使用计算属性过滤列表 <template> <div> <…

vue实现模糊搜索功能

vue实现模糊搜索功能

实现模糊搜索的基本思路 在Vue中实现模糊搜索功能通常需要结合输入框的事件监听、数据过滤以及实时展示。核心是利用JavaScript的字符串方法或正则表达式对数据进行匹配筛选。 使用计算属性实现模糊…

vue实现城市模糊查询

vue实现城市模糊查询

实现思路 使用Vue实现城市模糊查询功能,主要通过输入框监听用户输入,结合数组的过滤方法动态匹配城市名称。核心步骤包括数据准备、输入监听、模糊匹配和结果展示。 数据准备 准备一个城市列表数据,可以存…

vue中实现模糊查询

vue中实现模糊查询

实现模糊查询的方法 在Vue中实现模糊查询通常需要结合输入框的监听和数组过滤功能。以下是几种常见的实现方式: 使用计算属性过滤数据 <template> <div>…

react如何做出模糊搜索

react如何做出模糊搜索

实现模糊搜索的方法 在React中实现模糊搜索可以通过多种方式完成,常见的方法是结合输入框的状态管理和第三方模糊搜索库。以下是几种常见的实现方式: 使用Fuse.js进行模糊搜索 Fuse.js是一…