2012-01-25 86 views
2

我想在JavaScript中创建一个简单的原型,从字符串中移除一个字符(如Python的条)。这可能已经存在于JavaScript中,但我无法找到它,这对我来说更像是一种练习,而不是替代已存在的东西。创建JavaScript原型

function strip(chars) { 
    this.replace(chars,""); 
} 

String.prototype.strip=strip; 

var wrong = "Hellow"; 

alert(wrong.strip("w")); 

当我运行此代码时,警报显示“未定义”。我的怀疑是功能this.,但不知道。我也做了这里提琴:http://jsfiddle.net/jdb1991/rapxM/

感谢

回答

5

您必须指定return,这样操作的结果是返回

function strip(chars) { 
    return this.replace(chars,""); 
} 

工作演示:http://jsfiddle.net/rapxM/1/

请注意,您的代码不会删除所有字符,它只会删除首次出现的。如果要删除所有字符,请使用:

function strip(chars) { 
    return this.split(chars).join(''); 
} 
  • .split分割成小片的字符串,根据给定的参数(返回值:数组)。
  • .join()是一个数组方法,它串接数组(返回值:字符串)从一开始就
+0

谢谢!我知道这一次发生,只是想让原型工作。 +1例如,当我点击计时器时将设置为答案。 – jdborg

+0

请注意,Python的'strip'不会从字符串中间删除事件(http://docs.python.org/library/stdtypes.html#str.strip)。不知道@ jdborg究竟想要什么。 –

+0

如果他想模仿Python的'strip'方法,他可以切换到正则表达式,或者修剪两个循环中的字符。 –

0

如果你想有相同的行为Python的strip,你应该只删除字符和结束的字符串。下面是使用正则表达式,完成此解决方案:

function strip(chars, wholeString) { 
    if (wholeString) 
     chars = "(" + chars + ")*"; 
    else 
     chars = "[" + chars + "]*"; 
    var pattern = "^" + chars + "|" + chars + "$"; 
    return this.replace(new RegExp(pattern, "g"),""); 
} 

如果wholeString设置为true,它将把chars为必须一起出现字符块(你的问题好像问了那个),而如果未设置(默认值),则chars中的每个字符都将自行删除(如在Python中)。使用这样的:

String.prototype.strip=strip; 

var str = "ababccabcccbbab"; 
document.write(str.strip("ab"));  // -> "ccabccc" 
document.write(str.strip("ab", true)); // -> "ccabcccbb" 

注意ab不从str中间取出。在第一次调用中,ab分开处理,因此bb也被剥离。