javascript - 如何通过匹配具有相似字符的两个值来返回字符串?
问题描述
没有多大帮助的问题标题。让我解释一下:对于搜索功能,我使用下面的代码返回匹配搜索查询的项目:
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));
}
如果查询字符串的值(包含土耳其语字符)是DİĞER ,则我需要返回一个值为DIGER的项目,反之亦然。
我试过
if(query.includes('ğ') || query.includes('ş') || query.includes('ö') || query.includes('ü') || query.includes('ı') || query.includes('ç')) {
return value.toLowerCase().indexOf(query.replace('ğ', 'g').replace('ş', 's').replace('ö', 'o').replace('ü', 'u').replace('ı', 'i').replace('ç', 'c').toLowerCase()) > -1;
}
没有按我的要求工作,它只转换土耳其语字符,但我找不到任何解决方案。我将如何完成这样的任务?
解决方案
问题看起来value.toLowerCase()
可能仍然包括土耳其语,因此如果 newquery
仅搜索英文字符,则可能无法在 new 中找到它value
。
一种选择是使用the和 the到英文字符的无条件转换,之后您可以使用检查新的(大海捞针)是否为(针):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);
}
推荐阅读
- android - 一段时间后,Android会杀死我所有的应用服务
- python - 尝试使用 pandas.read_gbq() 函数时,pandas-gbq 抛出错误“找不到字段 google.protobuf.FileOptions.php_metadata_namespace”
- asp.net-core - 带有 VSCode 和 VS 2019 的 ASP.NET Core 前端开发人员工作流
- sql - 为什么“IN”查询标签在sql存储过程中的开销如此之大?
- angular - 如何以角度获取 URL?
- c# - 为什么使用“RenderTargetBitmap”类会使 GDI 句柄数增加?
- encryption - GPG - 以非交互方式更改密码
- c# - PayPal - 如何在 PayPal 订单请求正文中动态创建订单项?
- curl - 仅从 FTP 下载二进制文件的标头
- crystal-reports - 水晶报表如何向下然后跨栏