Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.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 遍历.replace()中的数组_Javascript_Arrays_Replace - Fatal编程技术网

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并使用标志global
    g

    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!