替换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?
答
您可以使用正则表达式是这样的:
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), '');
然而,对于这种特殊情况下,在其他的答案中所示的正则表达式的解决方案可能是优选的。
字符串是不可变的 - > ['String.prototype.replace()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace) – Andreas
这是一个算法设计练习,还是实际进行子串替换的目标? – msanford
[最快的方法替换字符串中所有字符的实例]的可能重复(http://stackoverflow.com/questions/2116558/fastest-method-to-replace-all-instances-of-a-character-in -a弦) –