Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数优化,用非重音元音替换重音元音_Javascript_Regex_Algorithm_Optimization - Fatal编程技术网

Javascript 函数优化,用非重音元音替换重音元音

Javascript 函数优化,用非重音元音替换重音元音,javascript,regex,algorithm,optimization,Javascript,Regex,Algorithm,Optimization,我需要从数据库中检索姓名,可以使用重音元音和非重音元音搜索这些姓名,在这两种情况下,响应都必须返回所有匹配的姓名。我用来解决这个问题的方法是一个函数,它用一个包含两个元音的字符串替换搜索名称中的元音,以便使用regex方法查找这两个选项 如何优化此功能 const replaceVowels = fullName => { const v = [ { vocal: "a", replace: "[aá]" }, { vocal: "e", repla

我需要从数据库中检索姓名,可以使用重音元音和非重音元音搜索这些姓名,在这两种情况下,响应都必须返回所有匹配的姓名。我用来解决这个问题的方法是一个函数,它用一个包含两个元音的字符串替换搜索名称中的元音,以便使用regex方法查找这两个选项

如何优化此功能

const replaceVowels = fullName => {
    const v = [
        { vocal: "a", replace: "[aá]" },
        { vocal: "e", replace: "[eé]" },
        { vocal: "i", replace: "[ií]" },
        { vocal: "o", replace: "[oó]" },
        { vocal: "u", replace: "[uú]" },
        { vocal: "á", replace: "[aá]" },
        { vocal: "é", replace: "[eé]" },
        { vocal: "í", replace: "[ií]" },
        { vocal: "ó", replace: "[oó]" },
        { vocal: "ú", replace: "[uú]" }
    ];
    for (let i = 0; i < v.length; i++) {
         fullName = fullName.replace(new RegExp(v[i].vocal, "gi"), v[i].replace);
    }
    return { $regex: fullName, $options: "i" };
};
replaceVowels("mayúsculas");
// returns "m[aá]y[uú]sc[uú]l[aá]s"
const replace元音=fullName=>{
常数v=[
{发音:“a”,替换为:“[aá]”},
{发音:“e”,替换为:“[eé]”},
{发音:“i”,替换为:“[ií]”},
{发音:“o”,替换为:“[oó]”},
{发音:“u”,替换为:“[uú]”},
{发音:“á”,替换为:“[aá]”},
{发音:“e”,替换为:“[e]”},
{发音:“i”,替换为:“[ií]”},
{发音:“o”,替换为:“[oó]”},
{发音:“ú”,替换为:“[uú]”}
];
for(设i=0;i
为了提高效率,为什么不在MongoDB中使用a呢?尤其是因为它们已经具备了您想要的行为

但是,清除我之前给出的答案,可以使函数更加紧凑

const replace元音=fullName=>{
//匹配字符的模式
//…然后应将其替换为模式
常数v=[“[aá]”、[eé]、[ií]、[oó]、[uú]”;
for(设i=0;i
一个简单的(非常小的)速度优化是将元音列表作为一个对象,只需遍历一次
fullName
。作为奖励,代码现在可以按预期工作了

const replaceVowels = fullName => {
  const v = {
    "a": "[aá]",
    "e": "[eé]",
    "i": "[ií]",
    "o": "[oó]",
    "u": "[uú]",
    "á": "[aá]",
    "é": "[eé]",
    "í": "[ií]",
    "ó": "[oó]",
    "ú": "[uú]"
  };
  let output = "";
  for (let i = 0; i < fullName.length; i++) {
    if (v[fullName[i]]){
      output += v[fullName[i]];
    }
    else {
      output += fullName[i];
    }
  }
  return output;
};
replaceVowels("mayúsculas");
// returns "m[aá]y[uú]sc[uú]l[aá]s"
const replace元音=fullName=>{
常数v={
“a”:“[aá]”,
“e”:“e”,
“i”:“[ií]”,
“o”:“o”,
“u”:“[uú]”,
“a”:“[aá]”,
“e”:“e”,
“i”:“i”,
“o”:“o”,
“u”:“[uú]”
};
让输出=”;
for(设i=0;i
replace元音(“mayúsculas”)
的输出是
“m[aáy[uú]sc[uú]l[aás”
,对吗?为什么将
vocal
转换为正则表达式的可能重复?根据你最后的评论,@anibalajt你确定你的函数做了你认为它做的事情吗?当我尝试运行它时,它返回一个承诺,当我将它更改为一个标准函数时,它返回
“m[a[aá]]y[uú]sc[u[uú]]l[a[aá]]s”