如何在JavaScript中替换字符串中的特定字符?

如何在JavaScript中替换字符串中的特定字符?,javascript,string,replace,Javascript,String,Replace,给定一个像aaabba这样的字符串,我想要一个函数,它可以将a的b的b的和b的a的,返回bbbaab 我试过这个笨拙的: var newa = []; function swit(x) { for (var i = 0; i < x.length; i++) { if (x[i] === 'a') { newa.push('b'); } else if (x[i] === 'b') {

给定一个像
aaabba
这样的字符串,我想要一个函数,它可以将a的b的b的b的a的,返回
bbbaab

我试过这个笨拙的:

var newa = [];
function swit(x) { 
    for (var i = 0; i < x.length; i++) {
        if (x[i] === 'a') {
            newa.push('b');
        } 
        else if (x[i] === 'b') {
            newa.push('a');
        } 
        alert(newa);
    }
}
swit("aaab");
但没有任何变化。为什么?


您能给我一个提示,说明哪里出了问题,以及如何获得所需的结果吗?

您的第一个示例有效,但将字符串替换为字符数组(与字符串不同)。您可以简单地
加入
结果数组以获得所需的结果:

function swit(x) {
    var newa = [];

    for (var i = 0; i < x.length; i++) {
        if (x[i] === 'a') {
            newa.push('b');
        } else if (x[i] === 'b') {
            newa.push('a');
        }
    }

    var arrayJoined = newa.join('');
    alert(arrayJoined);
    return arrayJoined;
}
功能开关(x){
var newa=[];
对于(变量i=0;i

对于第二个示例,
replace
替换字符串中的所有事件,不需要在For循环中运行。所以,在第二个代码示例中,您实际要做的是:
对于字符串中的每个字符:如果字符是“a”,则替换为b。如果字符为“b”,则替换为a
。它基本上只是将所有的
a
切换到
b
,将
b
切换回
a
。这将产生与输入字符串相同的输出字符串。

您的第一个示例有效,但将字符串替换为字符数组(与字符串不同)。您可以简单地
加入
结果数组以获得所需的结果:

function swit(x) {
    var newa = [];

    for (var i = 0; i < x.length; i++) {
        if (x[i] === 'a') {
            newa.push('b');
        } else if (x[i] === 'b') {
            newa.push('a');
        }
    }

    var arrayJoined = newa.join('');
    alert(arrayJoined);
    return arrayJoined;
}
功能开关(x){
var newa=[];
对于(变量i=0;i

对于第二个示例,
replace
替换字符串中的所有事件,不需要在For循环中运行。所以,在第二个代码示例中,您实际要做的是:
对于字符串中的每个字符:如果字符是“a”,则替换为b。如果字符为“b”,则替换为a
。它基本上只是将所有的
a
切换到
b
,将
b
切换回
a
。这将产生与输入字符串相同的输出字符串。

最简单的方法是使用
split
将文本拆分为单个字符,然后通过简单地替换
a=>b
b=>a
再次将其连接在一起,或者只使用
replace

'bbbaab'.split('').map(char => char === 'a' ? 'b' : 'a').join('');

'bbbaab'.replace(/a|b/g, (match) => match === 'a' ? 'b' : 'a');
函数交换(str){
返回str.split(“”).map(char=>char=='a'?'b':'a').join(“”);
}
函数swap2(str){
return str.replace(/a | b/g,(match)=>match==='a'?'b':'a');
}
console.log(swap('bbbaab'));

控制台日志(swap2('bbbaab'))
最简单的方法是使用
split
将文本拆分为单个字符,然后通过简单地替换
a=>b
b=>a
再次将其连接在一起,或者只使用
replace

'bbbaab'.split('').map(char => char === 'a' ? 'b' : 'a').join('');

'bbbaab'.replace(/a|b/g, (match) => match === 'a' ? 'b' : 'a');
函数交换(str){
返回str.split(“”).map(char=>char=='a'?'b':'a').join(“”);
}
函数swap2(str){
return str.replace(/a | b/g,(match)=>match==='a'?'b':'a');
}
console.log(swap('bbbaab'));

控制台日志(swap2('bbbaab'))您需要将警报行从for循环移到末尾,然后使用
newa
转换为不带逗号的字符串

另外,在
swit
函数中移动
newa
数组声明也是有意义的

最后,还应考虑添加另一个条件,只要不是“<代码> > <代码> > <代码> b>代码>,就可以将完全相同的当前字符推到<代码> Neaa<代码>数组中,因此输出字符串长度与原始字符串相同。

函数swit(x){
var newa=[];
对于(变量i=0;iswit(“aasdfcvbab”)您需要将警报行从for循环移到末尾,然后使用
newa
转换为不带逗号的字符串

另外,在
swit
函数中移动
newa
数组声明也是有意义的

最后,还应考虑添加另一个条件,只要不是“<代码> > <代码> > <代码> b>代码>,就可以将完全相同的当前字符推到<代码> Neaa<代码>数组中,因此输出字符串长度与原始字符串相同。

函数swit(x){
var newa=[];
对于(变量i=0;iswit(“aasdfcvbab”)当你用一个数组发出警报时,它会使用带有逗号的toString()。你想过使用正则表达式吗?您可以使用
myString.replace(/somePattern/g,'replaceTo')
或使用
newregexp(options)
。这里是游乐场:,我的quick(可能无法按您希望的方式工作,但您已经知道了)这里的示例:当您使用一个数组执行警报时,它使用带有逗号的toString()。您想过如何使用正则表达式吗?您可以使用
myString.replace(/somePattern/g,'replaceTo')
或使用
newregexp(options)
。这里是游乐场:,我的quick(可能无法按您希望的方式工作,但您得到了这个想法)示例:您可以使用哈希映射消除if/else树(尤其是当您开始添加更多替换规则时):
“aaabba”。replace(/a | b/g,x=>{const map={a:'b',