2016-12-24 54 views
0

我聽說,JavaScript中的字符串具有不變性。如何在JavaScript中爲String編寫替換方法?

那麼,我該如何編寫一個方法來替換字符串中的某些字符呢?

我要的是:

String.prototype.replaceChar(char1, char2) { 
    for (var i = 0; i < this.length; i++) { 
     if (this[i] == char1) { 
      this[i] = char2; 
     } 
    } 
    return this; 
} 

然後,我可以用這樣的:

'abc'.replaceChar('a','b'); // bbc 

我知道這是行不通的,因爲字符串的不變性。

但在本機代碼,我可以使用本機這樣的替代方法:

'abc'.replace(/a/g,'b'); 

我真的不知道該如何解決這個問題。

+0

'replace'返回一個新字符串。它不會修改原文。 –

+0

所以你想通過引用來替換字符串/字符? – Dwza

回答

1

您可以使用數組,太:

String.prototype.replaceChar = function (char1, char2) { 
 
newstr=[]; 
 
for (i = 0; i < this.length; i++) { 
 
newstr.push(this[i]); 
 
if (newstr[i] == char1) { 
 
newstr[i] = char2 
 
} 
 
} 
 

 
return newstr.join(""); 
 
} 
 

 
console.log('abca'.replaceChar('a','G'));

6

您可以用下面的辦法:

String.prototype.replaceAll = function(search, replacement) { 
    return this.replace(new RegExp(search, 'g'), replacement); 
}; 
+0

你甚至不需要一個新變量,只需使用'return this.replace(new RegExp(search,'g'),replacement);' – Dekel

+3

這與''abc'.replace(/ a/g ,'b');',除了它也調用另一個函數並創建一個RegExp對象。 –

1

如果不想正則表達式(如在一個方式來學習),你可以使用以下命令:

String.prototype.replaceChar = function(char1, char2) { 
 
    var s = this.toString(); 
 
    for (var i = 0; i < s.length; i++) { 
 
    if (s[i] == char1) { 
 
     s = s.slice(0, i) + char2 + s.slice(i+1); 
 
    } 
 
    } 
 
    return s; 
 
} 
 
console.log('aaabaaa'.replaceChar('a', 'c'))

這個想法是,你需要這個字符串的內容在一個臨時變量中,然後你需要逐字符,如果該字符是你正在尋找的 - 你需要再次建立你的字符串。

相關問題