首页 > 解决方案 > 如何通过匹配具有相似字符的两个值来返回字符串?

问题描述

没有多大帮助的问题标题。让我解释一下:对于搜索功能,我使用下面的代码返回匹配搜索查询的项目:

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;
 }

没有按我的要求工作,它只转换土耳其语字符,但我找不到任何解决方案。我将如何完成这样的任务?

标签: javascript

解决方案


问题看起来value.toLowerCase()可能仍然包括土耳其语,因此如果 newquery仅搜索英文字符,则可能无法在 new 中找到它value

一种选择是使用the和 the到英文字符的无条件转换,之后您可以使用检查新的(大海捞针)是否为(针):valuequeryincludesvalue.includesquery

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);
}

推荐阅读