Javascript 遍历.replace()中的数组
我需要将字符串中的所有字母替换为其他符号(存储在数组中)Javascript 遍历.replace()中的数组,javascript,arrays,replace,Javascript,Arrays,Replace,我需要将字符串中的所有字母替换为其他符号(存储在数组中) for(变量i=0;i{ a[c]=符号[i] 归还 }, {}) 函数运行(){ output.value=[…input.value].map((i)=>signMap[i]).join(“”) } 我的意见: 我更喜欢创建一个对象来存储所有映射,就像signMap所做的那样 创建一个正则表达式,如(a | b | c | ef)(这样就不需要为输入字符串循环每个字符,即使它也可以支持多个字母)PS:假设数组=字母中的元素不是特殊字母
for(变量i=0;i
var input=document.getElementById('input');
var output=document.getElementById('output');
变量字母=['a','b','c'];
变量符号=['。':','-'];
函数运行(){
对于(变量i=0;i
我会将字母和符号转换为如下查找表:
{a: ',', b:':' // etc..}
所以你不需要用每个键搜索字母。您可以在开始时执行一次,也可以仅使用开始时的格式。您可以将它映射到一个新值
var input=document.getElementById('input');
var output=document.getElementById('output');
变量字母=['a','b','c'];
变量符号=['。':','-'];
让signMap=letters.reduce((a,c,i)=>{
a[c]=符号[i]
归还
}, {})
函数运行(){
output.value=[…input.value].map((i)=>signMap[i]).join(“”)
}
我的意见:
signMap
所做的那样(a | b | c | ef)
(这样就不需要为输入字符串循环每个字符,即使它也可以支持多个字母)PS:假设数组=字母中的元素不是特殊字母,如果是,则需要根据实际情况调整正则表达式
String.replace(regex,(replacement)=>{return'what your need'})
var input=document.getElementById('input');
var output=document.getElementById('output');
变量字母=['a'、'b'、'c'、'ef'];
变量符号=[',':','-','@'];
让regex=new RegExp(‘(‘+letters.join(‘|’)+’,‘g’)//假设Array=letters中的元素没有特殊字符。
让signMap=letters.reduce((pre,cur,curIndex)=>{
前[cur]=符号[curIndex]
返回前
}, {})
函数运行(){
output.value=input.value.replace(正则表达式,(项)=>{
返回标识图[项目]
});
}
问题在于更换步骤后的新更新值,您需要做的是存储新值,并在更换整套字符后,将新值设置为
output.value
这里的一个重要细节是,您需要替换与特定字母匹配的所有字符,以实现您可以构建一个Regexp并使用标志globalg
new RegExp(letters[i], 'g');
^
|
+---- This is the flag!
我建议的另一件事是使用函数addEventListener
将事件绑定到元素
var input=document.getElementById('input');
var output=document.getElementById('output');
变量字母=['a','b','c'];
变量符号=['。':','-'];
函数运行(){
var currentInput=此值;
对于(变量i=0;i
我认为您遗漏了一个重要的细节。OP希望替换输入中的字母。值
,而不是字母
数组本身。使用map是这种替换的典型答案+1两个数组字母
和符号
相交吗?i、 它们是否有共同的字符?我喜欢Regexp构建步骤,更好的方法是将该步骤从函数run
中删除。Regexp不需要方括号中的管道。它是管道或支架;)哈,你总是有鹰眼。
new RegExp(letters[i], 'g');
^
|
+---- This is the flag!