我正在尝试创建一个简单的函数来替换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代替?
答案 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), '');
但是,对于这种特殊情况,其他答案中显示的正则表达式解决方案可能更可取。