拼音搜索怎么实现首字母匹配?
我在做一个联系人搜索功能,用户输入拼音首字母(比如“zj”)要能匹配到“张杰”这种名字,但不知道怎么高效处理。
试过把中文转成拼音再截取首字母,但性能很差,而且引入的库太大了。有没有轻量点的办法?
现在用的是这个转换逻辑:
function getFirstLetters(str) {
return str.split('').map(char => {
// 这里调用了某个大体积的拼音库
return pinyin.getFullChars(char).charAt(0);
}).join('');
}
感觉每次输入都转一遍太卡了,尤其是列表有几百条的时候……有没有预处理或者更聪明的方案?
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));
}