我正在尝试扩展项目的javascript字符串功能,我希望能够有一个函数来删除函数中第一次出现的字符串。
JS不允许使用字符串函数的功能来更改文本。
错误我认为是试图将文本分配给'this'。
如果还有其他方法可以实现这一点,请帮助告诉我。
感谢
// remove first occurrence of a letter from a string
String.prototype.removeFirstMatch = function(char){
var text = '';
for(i = 0; i < this.length; i++){
if(this[i] == char){
text = this.slice(0, i) + this.slice(i + 1, this.length);
}
}
this = text;
}
var word = 'apple';
word.removeFirstMatch('p');
console.log(word);
答案 0 :(得分:2)
Javascript中的字符串是不可变的。这意味着您无法更改字符串对象的内容。因此,像.slice()
这样的东西实际上并没有修改字符串,而是返回一个新的字符串。
因此,您的.removeFirstMatch()
方法需要返回一个新字符串,因为它无法修改当前字符串对象。
您也无法在Javascript中分配给this
。
这是一个返回新字符串的版本:
// remove first occurrence of a letter from a string
String.prototype.removeFirstMatch = function(char) {
for (var i = 0; i < this.length; i++) {
if (this.charAt(i) == char) {
return this.slice(0, i) + this.slice(i + 1, this.length);
}
}
return this;
}
var word = 'apple';
var newWord = word.removeFirstMatch('p');
document.write(newWord);
&#13;
注意:如果var
使i
成为局部变量而不是隐式全局变量,并且允许它以strict
模式运行,我也会将for
放在前面。并且,一旦找到第一个匹配,我就退出// remove first occurrence of a letter from a string
String.prototype.removeFirstMatch = function(char) {
var found = this.indexOf(char);
if (found !== -1) {
return this.slice(0, found) + this.slice(found + 1);
}
return this;
}
var word = 'apple';
var newWord = word.removeFirstMatch('p');
document.write(newWord);
循环,而不是继续循环。并且,它返回新字符串,或者如果没有进行任何更改,则返回原始字符串。
这可以清理一下:
{{1}}&#13;
答案 1 :(得分:0)
javascript中的字符串是不可变的(你不能改变字符串......但你可以重新分配一个字符串......)
此外,您无法更改函数中this
的值。请参阅@ TobiasCohen的回答here。
但是,您可以返回更新后的值,并将word
重新分配给返回的值...
String.prototype.removeFirstMatch = function(char){
var text = '';
for(i = 0; i < this.length; i++){
if(this[i] == char){
text = this.slice(0, i) + this.slice(i + 1, this.length);
}
}
return text;
}
var word = 'apple';
word = word.removeFirstMatch('p');
console.log(word);
答案 2 :(得分:0)
字符串是不可变的(不能修改字符串)。但是你可以这样做:
String.prototype.removeFirstMatch = function(char){
var text = '';
for(i = 0; i < this.length; i++){
if(this[i] == char){
text = this.slice(0, i) + this.slice(i + 1, this.length);
}
}
return text;
}
var word = 'apple';
newWord = word.removeFirstMatch('p');
console.log(newWord);