是否可以使用排序器搜索字符串?

Tat*_*shi 5 javascript collation

我目前正在创建一种通过查询字符串过滤项目的机制。

我想将其转换为区域设置感知版本(基本上,英语中不区分大小写,但也适用于日语假名):

return items.filter((item) => {
  return item.name.indexOf(query) !== -1;
});
Run Code Online (Sandbox Code Playgroud)

我听说过 ES6 Intl.Collation,如果它能达到我的目标,我想使用它。

fff*_*fff 0

以下适用于法语,也可能适用于日语:

\n
const collator = new Intl.Collator(\'en\', { sensitivity: \'base\', usage: \'search\' });\nfunction contains(string, substring) {\n  if (substring.length === 0) {\n    return true;\n  }\n  string = string.normalize(\'NFC\');\n  substring = substring.normalize(\'NFC\');\n  let scan = 0;\n  for (; scan + substring.length <= string.length; scan += 1) {\n    const slice = string.slice(scan, scan + substring.length);\n    if (collator.compare(substring, slice) === 0) {\n      return true;\n    }\n  }\n  return false;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

例如。

\n
contains("\xc3\xa0 point", "a point")\ntrue\n
Run Code Online (Sandbox Code Playgroud)\n

比照。https://github.com/adobe/react-spectrum/blob/7f63e933e61f20891b4cf3f447ab817f918cb263/packages/%40react-aria/i18n/src/useFilter.ts#L58

\n