您好我很难解决我遇到的问题:
我有一个带自动完成功能的输入字段。我想为它重音折叠。
E.g。
当我使用术语mun
进行搜索时,这两个单词应显示为Dortmund & München
我目前所拥有的是,如果我使用mün
一词进行搜索,则列出Dortmund
。但不是München
accentMap = {
'ü': 'u',
'Ü': 'u',
'ä': 'a',
'Ä': 'a',
'ö': 'o',
'Ö': 'o'
};
let str = '';
for(let i = 0; i < input.length; i++) {
str += this.accentMap[input.charAt(i)] || input.charAt(i);
}
然后我使用str
与API进行通话,返回Dortmund
或München
等条目。
答案 0 :(得分:1)
那是因为你的代码总是将“mün”转换为“mun”,因此,字符串可以在“Dortmund”中找到,但绝不会在“München”中找到。
要解决此问题,请先将代码包装在可重用的函数中:
function removeAccents(input: string){
let accentMap = {
'ü': 'u',
'Ü': 'u',
'ä': 'a',
'Ä': 'a',
'ö': 'o',
'Ö': 'o'
};
let str = '';
for(let i = 0; i < input.length; i++) {
str += this.accentMap[input.charAt(i)] || input.charAt(i);
}
return str;
}
然后,当您想要将输入与单词列表进行比较时,请使用如下语句:
if(removeAccents(input) == removeAccents(word)){
// The input matched the word
}