我的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函数中循环,我不知道为什么。任何帮助都会被批评。感谢
答案 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');
};