第一次我使用jQuery.inArray(),它的行为有点奇怪。

如果对象在数组中,它将返回0,但0在Javascript中是false。因此,下面将输出:"is NOT in array"

var myarray = [];
myarray.push("test");

if(jQuery.inArray("test", myarray)) {
    console.log("is in array");
} else {
    console.log("is NOT in array");
}

我将不得不改变if语句为:

if(jQuery.inArray("test", myarray)==0)

但这使得代码难以阅读。特别是对于不知道这个函数的人。他们会期望jQuery。inArray("test", myarray)当"test"在数组中时返回true。

我的问题是,为什么要这样做?我真的不喜欢这个。但这样做一定有一个很好的理由。


当前回答

inArray返回数组中元素的索引。如果没有找到该元素,则返回-1 else index of element。

if(jQuery.inArray("element", myarray) === -1) {
    console.log("Not exists in array");
} else {
    console.log("Exists in array");
}

其他回答

或者,如果您想要稍微花哨一点,您可以使用按位not(~)和逻辑not(!)操作符将inArray函数的结果转换为布尔值。

if(!!~jQuery.inArray("test", myarray)) {
    console.log("is in array");
} else {
    console.log("is NOT in array");
}

我通常用

if(!(jQuery.inArray("test", myarray) < 0))

or

if(jQuery.inArray("test", myarray) >= 0)

美元。inArray返回找到的元素的索引,如果没有返回-1——不是布尔值。正确的是

if(jQuery.inArray("test", myarray) != -1) {
    console.log("is in array");
} else {
    console.log("is NOT in array");
} 

最短最简单的方法是。

arrayHere = ['cat1', 'dog2', 'bat3']; 

if(arrayHere[any key want to search])   
   console.log("yes found in array");

使用inArray(x, arr)的正确方法是根本不使用它,而是使用arr. indexof (x)。

官方标准名称也更清楚地说明了一个事实,即返回值是一个索引,因此如果传递的元素是第一个,则返回0(在Javascript中是假的)。

(请注意,arr.indexOf(x)直到IE9才在Internet Explorer中得到支持,所以如果你需要支持IE8或更早的版本,这将不起作用,jQuery函数是更好的选择。)