从字符串对象

时间:2016-01-09 06:10:00

标签: javascript javascript-objects

我正在尝试扩展项目的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);

3 个答案:

答案 0 :(得分:2)

Javascript中的字符串是不可变的。这意味着您无法更改字符串对象的内容。因此,像.slice()这样的东西实际上并没有修改字符串,而是返回一个新的字符串。

因此,您的.removeFirstMatch()方法需要返回一个新字符串,因为它无法修改当前字符串对象。

您也无法在Javascript中分配给this

这是一个返回新字符串的版本:

&#13;
&#13;
// 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;
&#13;
&#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);循环,而不是继续循环。并且,它返回新字符串,或者如果没有进行任何更改,则返回原始字符串。

这可以清理一下:

&#13;
&#13;
{{1}}
&#13;
&#13;
&#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);