替换JS中的某些字符的所有实例?

问题描述:

我想创建一个简单的函数来替换JS中的字符串中的某个字符的所有实例。在这种情况下,我想用o来代替所有的a替换JS中的某些字符的所有实例?

我很确定代码是正确的,但输出仍然是原始字符串。

function replaceLetter(string){ 
    for(var i = 0; i < string.length; i++){ 
    if(string[i] == 'a'){ 
     console.log(string[i]); 
     string[i] = 'o' 
    } 
    } 
    return string; 
} 

replaceLetter('hahaha') // returns 'hahaha' 

为什么不用o代替a?

+1

字符串是不可变的 - > ['String.prototype.replace()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace) – Andreas

+0

这是一个算法设计练习,还是实际进行子串替换的目标? – msanford

+0

[最快的方法替换字符串中所有字符的实例]的可能重复(http://*.com/questions/2116558/fastest-method-to-replace-all-instances-of-a-character-in -a弦) –

您可以使用正则表达式是这样的:

function replaceLetter(str) { 
 
    return str.replace(/a/g, 'o'); 
 
} 
 

 
var st = replaceLetter('hahaha'); 
 

 
console.log(st);

或者用另一个字符串来积累的结果是这样的:

function replaceLetter(str) { 
 
    var res = '';        // the accumulator (because string litterals are immutable). It should be initialized to empty string 
 
    
 
    for(var i = 0; i < str.length; i++) { 
 
     var c = str.charAt(i);     // get the current character c at index i 
 
     if(c == 'a') res += 'o';    // if the character is 'a' then replace it in res with 'o' 
 
     else res += c;       // otherwise (if it is not 'a') leave c as it is 
 
    } 
 

 
    return res; 
 
} 
 

 
var st = replaceLetter('hahaha'); 
 

 
console.log(st);

Strings in Javascript are immutable,因此对它们的任何更改都不会像您预期的那样反映出来。

考虑只用string.replace()函数:

function replaceLetter(string){ 
    // This uses a regular expression to replace all 'a' characters with 'o' 
    // characters (the /g flag indicates that all should be matched) 
    return string.replace(/a/g,'o'); 
} 

我总是喜欢使用split()join()

var string = "assassination"; 
var newString = string.split("a").join("o"); 

假设你想使用for循环:

function replaceLetter(string){ 
    var result = ''; 

    for (var i = 0; i < string.length; i++) { 
    result += string[i] === 'a' ? 'o' : string[i]; 
    } 
    return result; 
} 

你必须建立一个新的领域就像这样,因为正如评论中提到的那样,字符串是不可变的。你可以写string[4] = 'b',它不会导致错误,但它也不会做任何事情。

这可能是矫枉过正,但你可以使用reduce,这确实在内部的循环,并保持result变量:

const replaceLetter = string => 
    [...string].reduce((result, chr) => 
    result += (chr === 'a' ? 'o' : chr), ''); 

然而,对于这种特殊情况下,在其他的答案中所示的正则表达式的解决方案可能是优选的。