javascript在索引问题上替换字符

时间:2011-09-11 03:46:24

标签: javascript string

我的replaceAt方法看起来像here

String.prototype.replaceAt = function(index, c) {
  return this.substr(0, index) + c + this.substr(index+c.length);
}

我有一个修剪函数,从一个字符串中删除从特定索引开始的空格,如下所示:

String.prototype.startTrimAt = function(i) {
    var string = this;
    while (string.charAt(i) == ' '){
        string = string.replaceAt(i, '');
    }
    return string;
};

所以这个函数会像这样工作:

"(  tree)".startTrimAt(1); //returns (tree)

我遇到的问题是它只是在startTrimAt函数中循环,我不知道为什么。任何帮助都会被批评。感谢

4 个答案:

答案 0 :(得分:1)

对于空字符串,replaceAt()方法似乎不正确。

尝试

String.prototype.replaceAt = function(index, c) {
    return this.substr(0, index) + c + this.substr(index + (c.length == 0 ? 1 : c.length));
}

答案 1 :(得分:1)

当第二个参数为零长度字符串时,您的replaceAt无法正常工作:

"( tree)".replaceAt(1,'')//returns "(  tree)"

请记住,您将替换与第二个参数中的字符串相同数量的字符。当该字符串的长度为零时,您将替换零个字符。

由于字符串实际上没有被改变,字符1总是'',因此你的无限循环。

请注意

"( tree)".substr(0,1) //returns "("

"( tree)".substr(1,6) //returns " tree)"

答案 2 :(得分:0)

replaceAt方法效果不佳。空字符串''的长度为0,因此返回substr(0, 1)substr(1),这相当于原始字符串( tree),因此循环。由于您提供了单个索引参数,我假设您只替换单个字符,因此您的replaceAt方法应为:

String.prototype.replaceAt = function(index, c) {
  return this.substr(0, index) + c + this.substr(index+1);
}

答案 3 :(得分:0)

一次删除一个字符效率低下。您可以使用正则表达式一次替换所有空格。

String.prototype.startTrimAt = function(i) {
    return this.substr(0,i) + this.substr(i).replace(/^ +/, '');
};

或者:

String.prototype.startTrimAt = function(i) {
    var re = new RegExp('^(.{'+i+'}) +');
    return this.replace(re, '$1');
};