如何检查特定元素是否在数组中? 我不想为此手动编写循环;相反,我想使用JavaScript内置函数,可能等同于
new Array(0,1,2,3,6,9,12,15,18).Contains(5) //return false
new Array(0,1,2,3,6,9,12,15,18).Contains(1) //return true
答案 0 :(得分:12)
Array对象确实有一个indexOf函数,如果该对象不存在,它将返回-1。但是,IE不支持此功能。
无论如何,您认为如何在幕后找到该项目?它必须循环!仅仅因为有内置函数并不意味着它是神奇的。
答案 1 :(得分:4)
您也可以编写扩展方法,如this thread中所述。
Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
if (this[i] === obj) {
return true;
}
}
return false;
}
And now you can simply use the following:
alert([1, 2, 3].contains(2)); // => true
alert([1, 2, 3].contains('2')); // => false
答案 2 :(得分:2)
正如@ Josh Stodola所说,indexOf函数是你需要的,但是这个函数是在 JavaScript 1.6 上引入的,为了兼容性,你可以使用Mozilla团队的这个实现,正是Firefox和SpiderMonkey中使用的那个:
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(elt /*, from*/)
{
var len = this.length >>> 0;
var from = Number(arguments[1]) || 0;
from = (from < 0)
? Math.ceil(from)
: Math.floor(from);
if (from < 0)
from += len;
for (; from < len; from++)
{
if (from in this &&
this[from] === elt)
return from;
}
return -1;
};
}
来源:MDC
答案 3 :(得分:1)
javascript中没有这样的方法。
某些库(例如jquery)有类似的方法,但它们在内部使用循环。
答案 4 :(得分:1)
看起来像jQuery.inArray
的工作inArray: function( elem, array ) {
for ( var i = 0, length = array.length; i < length; i++ )
// Use === because on IE, window == document
if ( array[ i ] === elem )
return i;
return -1;
}
答案 5 :(得分:1)
啊,有一种方法可以不循环,这很简单,人们只是不要在盒子外思考。
Array.prototype.contains = function(){
var joined = this.join("-~-");
var re = new RegExp("(^|-~-)" + arguments[0] + "($|-~-)");
return joined.match(re) !== null;
}
var arr = ["a","b","c","d"];
alert(arr.contains("a"));
alert(arr.contains("b"));
alert(arr.contains("c"));
alert(arr.contains("d"));
alert(arr.contains("e"));
循环妈妈,没有循环!