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