2011-09-11 97 views
0

我有我的replaceAt方法模樣的東西從hereJavaScript的索引問題替換字符

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函數中循環,我不知道爲什麼。任何幫助都會被處理。謝謝

回答

1

replaceAt()方法似乎不適用於空字符串。

嘗試

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

真棒。非常感謝你 :) –

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

如您所願時,第二個參數是零您replaceAt不起作用長度字符串:

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

請記住,您將替換與第二個參數中的字符串相同數量的字符。如果該字符串的長度爲零,則替換零個字符。

由於字符串並未真正改變,所以字符1總是'',因此是無限循環。

注意

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

"(tree)".substr(1,6) //returns " tree)" 
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'); 
};