Javascript 使用两个数组替换字符串中的字母?

Javascript 使用两个数组替换字符串中的字母?,javascript,arrays,string,replace,Javascript,Arrays,String,Replace,替换字符串的最有效方法是什么,如果它包含一个“m”,则将其替换为“e”,将“i”替换为“t”等等。这取决于您对“高效”的定义。使用这种结构,很难提高效率。但类似这样的东西是功能性和简短的: var str = "ajdisoiureenvmcnmvm" var arr1 = ["e","t","a","i","n","o","h","r","d","q","l","c","u","m","w","f","s","g","y","p","b","v","k","j","x","z"

替换字符串的最有效方法是什么,如果它包含一个“m”,则将其替换为“e”,将“i”替换为“t”等等。

这取决于您对“高效”的定义。使用这种结构,很难提高效率。但类似这样的东西是功能性和简短的:

    var str = "ajdisoiureenvmcnmvm"
    var arr1 = ["e","t","a","i","n","o","h","r","d","q","l","c","u","m","w","f","s","g","y","p","b","v","k","j","x","z"]
    var arr2 = ["m","i","e","n","v","r","d","j","s","o","u","c","b","a","f","g","h","k","l","p","q","t","w","x","z","y"]
|

在这里,我们使用字符类创建一个正则表达式来匹配每个源字符,然后使用函数执行替换操作以从数组中查找替换(如果有)

现在,如果可以更改结构,有更好的方法,比如使用map而不是
arr1.indexOf
。例如:

var rex = new RegExp("[" + arr1.join("") + "]", "g");
var result = str.replace(rex, function(letter) {
    var index = arr1.indexOf(letter);
    return index === -1 ? letter : arr2[index];
});
然后(这使用ES5的
对象.键
,如果需要可以填充):


这应该是不言自明和相对有效的

var rex = new RegExp("[" + Object.keys(map).join("") + "]", "g");
var result = str.replace(rex, function(letter) {
    return map[letter] || letter;
});
str=str.split(“”)
对于(变量i=0;i

不过,我还是会使用映射来处理这类事情。

如果您对
映射没有问题的话:

str = str.split("")
for(var i = 0; i < str.length; i++) {
    var c = str[i];
    var j = arr1.indexOf(c);
    str[i] = arr2[j];
}
str = str.join("");
var str=“ajdisoiurenvmcnmvm”
var arr1=[“e”、“t”、“a”、“i”、“n”、“o”、“h”、“r”、“d”、“q”、“l”、“c”、“u”、“m”、“w”、“f”、“s”、“g”、“y”、“p”、“b”、“v”、“k”、“j”、“x”、“z”]
var arr2=[“m”、“i”、“e”、“n”、“v”、“r”、“d”、“j”、“s”、“o”、“u”、“c”、“b”、“a”、“f”、“g”、“h”、“k”、“l”、“p”、“q”、“t”、“w”、“x”、“z”、“y”]
newStr=str.split(“”);
对于(变量i=0,len=newStr.length;i=0)
newStr[i]=arr1[index];
}
str=newStr.join(“”);
console.log(str);

可能更直接的方法是先将原始字符串放入数组中,这样您就可以更轻松地逐字符操作它:

var str = "ajdisoiureenvmcnmvm"
var arr1 = ["e","t","a","i","n","o","h","r","d","q","l","c","u","m","w","f","s","g","y","p","b","v","k","j","x","z"]
var arr2 = ["m","i","e","n","v","r","d","j","s","o","u","c","b","a","f","g","h","k","l","p","q","t","w","x","z","y"]

newStr = str.split("");
for (var i=0, len=newStr.length; i<len; i++)
{
    index = arr2.indexOf(newStr[i]);
    if(index>=0)
        newStr[i] = arr1[index];
}
str = newStr.join("");
console.log(str);
var arr1=[“e”、“t”、“a”、“i”、“n”、“o”、“h”、“r”、“d”、“q”、“l”、“c”、“u”、“m”、“w”、“f”、“s”、“g”、“y”、“p”、“b”、“v”、“k”、“j”、“x”、“z”];
var arr2=[“m”、“i”、“e”、“n”、“v”、“r”、“d”、“j”、“s”、“o”、“u”、“c”、“b”、“a”、“f”、“g”、“h”、“k”、“l”、“p”、“q”、“t”、“w”、“x”、“z”、“y”];
var str=“ajdisoiurenvmcnmvm”;
var数据=str.split(“”),索引;
对于(变量i=0;i=0){
数据[索引]=arr1[i];
}
}
//重新构建字符串
str=data.join(“”);

工作演示:

我知道您不会要求通过shell脚本完成,但它会让您感觉在这个特殊请求中,通过tr命令可以轻松完成

var arr1 = ["e","t","a","i","n","o","h","r","d","q","l","c","u","m","w","f","s","g","y","p","b","v","k","j","x","z"];
var arr2 = ["m","i","e","n","v","r","d","j","s","o","u","c","b","a","f","g","h","k","l","p","q","t","w","x","z","y"];
var str = "ajdisoiureenvmcnmvm";
var data = str.split(""), index;
for (var i = 0; i < arr2.length; i++) {
    index = str.indexOf(arr2[i]);
    if (index >= 0) {
        data[index] = arr1[i];
    }
}
// build the string back again
str = data.join("");

JavaScript中的“最高效”往往因您使用的引擎而异。只需编写有效的代码。如果你以后在某个特定的引擎上发现了性能问题,那么在这种情况发生时就要担心。你能改变事情的结构吗?例如,它必须是两个并行数组吗?我的意思是26行代码肯定不是最有效的way@T.J.Crowder你是什么意思@user:你为什么这么说?以什么标准来衡量效率?我想可能是这样:
str[I]=arr2[j]str[I]=arr2[j]。使用一个tmp字符串并附加它,可以工作,但可能会很慢。加入一个数组几乎不会更快,如果indexOf return-1您最好执行
str.split(“”)
var str = "ajdisoiureenvmcnmvm"
var arr1 = ["e","t","a","i","n","o","h","r","d","q","l","c","u","m","w","f","s","g","y","p","b","v","k","j","x","z"]
var arr2 = ["m","i","e","n","v","r","d","j","s","o","u","c","b","a","f","g","h","k","l","p","q","t","w","x","z","y"]

newStr = str.split("");
for (var i=0, len=newStr.length; i<len; i++)
{
    index = arr2.indexOf(newStr[i]);
    if(index>=0)
        newStr[i] = arr1[index];
}
str = newStr.join("");
console.log(str);
var arr1 = ["e","t","a","i","n","o","h","r","d","q","l","c","u","m","w","f","s","g","y","p","b","v","k","j","x","z"];
var arr2 = ["m","i","e","n","v","r","d","j","s","o","u","c","b","a","f","g","h","k","l","p","q","t","w","x","z","y"];
var str = "ajdisoiureenvmcnmvm";
var data = str.split(""), index;
for (var i = 0; i < arr2.length; i++) {
    index = str.indexOf(arr2[i]);
    if (index >= 0) {
        data[index] = arr1[i];
    }
}
// build the string back again
str = data.join("");
echo "ajdisoiureenvmcnmvm" |tr "etainohrdqlcumwfsgypbvkjxz" "mienvrdjsoucbafghklpqtwxzy"

exsnhrnbjmmvtacvata