Javascript 使用两个数组替换字符串中的字母?
替换字符串的最有效方法是什么,如果它包含一个“m”,则将其替换为“e”,将“i”替换为“t”等等。这取决于您对“高效”的定义。使用这种结构,很难提高效率。但类似这样的东西是功能性和简短的: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"
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]的确,我错过了。这不管用。我想知道为什么@user3184807会这么说。JS中的字符串是不可变的,所以不能执行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