这下面应该警告“真实”,但是,它警告“没有项目”。我在这个代码上错了。任何线索?
Array.prototype.CheckColor = function (datain) {
for (var i = 0, len = this.length; i < len; i++) {
if (this[i] === datain) {
return true;
} else {
return "No item";
}
}
}
var newstr = "red blue green".split(" ");
var oyrsval = Array.prototype.CheckColor.call(newstr, "blue");
alert(oyrsval);
答案 0 :(得分:1)
应该是
Array.prototype.CheckColor = function(datain){
for (var i = 0, len = this.length; i < len;i++ ){
if (this[i] === datain){
return true; // Return true if found
}
}
return "No item"; // else return
}
使用indexOf简化:
Array.prototype.CheckColor = function(datain){
return this.indexOf(datain) > -1 ? true : "No item";
}
答案 1 :(得分:0)
您将在for
将您的代码更改为:
for (var i = 0, len = this.length; i < len;i++) {
if (this[i] === datain) {
return true;
}
}
return "No item";
答案 2 :(得分:0)
将您的功能更改为:
Array.prototype.CheckColor = function(datain){
for (var i = 0, len = this.length; i < len;i++ ){
if (this[i] === datain) {
return true;
}
}
// if here, nothing found
return "No item";
}
答案 3 :(得分:0)
我们已经解释过你的问题是因为你太早回来了。我会提出另一个解决方案,也许更简单:
Array.prototype.CheckColor = function (datain) {
return this.some(function(el) {
return datain === el;
}) || 'No item';
}
在这种情况下, Array.prototype.some
方法很有用。此外,由于您正在扩展原型,因此当您可以直接使用Array.prototype.CheckColor.call(newstr, "blue")
时,无需严格执行newstr.CheckColor("blue")
。
查看演示。
Array.prototype.CheckColor = function (datain) {
return this.some(function(el) {
return datain === el;
}) || 'No item';
}
var found = "red blue green".split(" ").CheckColor("blue");
var notfound = "red blues green".split(" ").CheckColor("blue");
alert(found);
alert(notfound);
最后,如果测试项目是否在数组中是您唯一需要做的事情,那么您可以使用已有的Array.prototype.indexOf
方法:
newstr.indexOf("blue") !== -1
答案 4 :(得分:0)
循环数组没什么问题,但你也可以直接在字符串上重新编写:
String.prototype.CheckColor = function(datain) {
return RegExp("\\b" + datain + "\\b").test(this);
}
在现实世界中,我想你想要在datain
内逃避特殊的正则表达式字符。