拼音搜索怎么实现首字母匹配?

雨妍 阅读 10

我在做一个联系人搜索功能,用户输入拼音首字母(比如“zj”)要能匹配到“张杰”这种名字,但不知道怎么高效处理。

试过把中文转成拼音再截取首字母,但性能很差,而且引入的库太大了。有没有轻量点的办法?

现在用的是这个转换逻辑:

function getFirstLetters(str) {
  return str.split('').map(char => {
    // 这里调用了某个大体积的拼音库
    return pinyin.getFullChars(char).charAt(0);
  }).join('');
}

感觉每次输入都转一遍太卡了,尤其是列表有几百条的时候……有没有预处理或者更聪明的方案?

我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
开发者明轩
我之前这样搞的,预处理名字,把每个名字的拼音首字母存下来,搜索时直接比对这个字段,快多了。比如:

pre class="pure-highlightjs line-numbers" code class="language-javascript">function preprocessNames(names) {
return names.map(name => ({
original: name,
pinyinInitials: name.split('').map(char => pinyin.getFullChars(char)[0]).join('')
}));
}

function searchNames(preprocessedNames, query) {
return preprocessedNames.filter(item => item.pinyinInitials.startsWith(query));
}
点赞
2026-03-23 06:10