Angular 2 Accent折叠

时间:2017-02-09 16:00:32

标签: angular typescript typeahead

您好我很难解决我遇到的问题:

我有一个带自动完成功能的输入字段。我想为它重音折叠。

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进行通话,返回DortmundMünchen等条目。

1 个答案:

答案 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
}