问题标题没有太大帮助。让我解释一下:对于搜索功能,我使用下面的代码返回与搜索查询匹配的项目:
$ sudo add-apt-repository universe
$ sudo apt install gnome-tweak-tool
$ sudo apt update
$ gnome-tweaks
在某些情况下,如果包含土耳其语字符的查询字符串的值为DİĞER,反之亦然,我需要返回其值为 DIGER 的项目。
我尝试过
filter(value: string, query: string): boolean {
return value.toLowerCase().indexOf(query.toLowerCase()) > -1;
}
filteredItems() {
return this.items.filter(i => this.filter(i.value, this.queryString));
}
不能完全按照我的要求工作,它只能转换土耳其语字符,但找不到任何解决方案。我将如何完成这样的任务?
答案 0 :(得分:1)
问题似乎是value.toLowerCase()
可能仍包含土耳其语,因此如果新的query
仅搜索英文字符,则可能在新的value
中找不到它。 / p>
一种选择是将value
和query
都使用无条件转换为英文字符,然后可以使用includes
进行检查如果新的value
(大海捞针).includes
和query
(针):
const chars = {
ğ: 'g',
ş: 's',
ö: 'o',
ü: 'u',
ı: 'i',
ç: 'c',
};
const convert = str => str
.replace(/[ğşöüıç]/g, char => chars[char])
.toLowerCase();
filter(value: string, query: string): boolean {
const [replacedValue, replacedQuery] = [value, query].map(convert);
return replacedValue.includes(replacedQuery);
}
答案 1 :(得分:0)
@CertainPerformance的答案并非在所有情况下都是正确的。有一种解决此问题的官方有效方法。 String.toLocalLowerCase()方法;
function filter(value: string, query: string): boolean {
return value.toLocaleLowerCase('tr-TR')
.indexOf(query.toLocaleLowerCase('tr-TR')) > -1;
}
// ------- Test Code ----------
console.log(filter('Şaban', 'şa')); //true
console.log(filter('çoban', 'ço')); //true
console.log(filter('ağa', 'aĞa')); //true
console.log(filter('Ömer', 'Öm')); //true
console.log(filter('Işıl', 'ıŞIl')); //true
console.log(filter('Ümit', 'ümİt')); //true
如果不提供'tr-TR'参数,它将自动查看浏览器的语言设置,但有时在将'I'转换为'ı'时会给出错误的结果。