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

时间:2017-02-10 15:10:21

标签: javascript iteration

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

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

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代替?

4 个答案:

答案 0 :(得分:2)

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

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);

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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');
}

答案 3 :(得分:0)

假设您要使用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), '');

但是,对于这种特殊情况,其他答案中显示的正则表达式解决方案可能更可取。