jQuery.inArray(),如何正确使用它?

nba*_*bar 322 javascript jquery

我第一次工作,jQuery.inArray()它有点奇怪.

如果对象在数组中,它将返回0,但在Javascript中0为false.所以以下将输出:"不在数组中"

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

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

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

if(jQuery.inArray("test", myarray)==0)
Run Code Online (Sandbox Code Playgroud)

但这使得代码难以理解.特别是对于不了解这个功能的人.当"test"在数组中时,他们会期望jQuery.inArray("test",myarray)给出true.

所以我的问题是,为什么这样做?我真的不喜欢这个.但必须有一个很好的理由这样做.

Den*_*nis 683

inArray返回数组中元素的索引,而不是指示数组中是否存在该项的布尔值.如果未找到该元素,-1将返回.

因此,要检查项目是否在数组中,请使用:

if(jQuery.inArray("test", myarray) !== -1)
Run Code Online (Sandbox Code Playgroud)

  • CoffeeScript:`如果jQuery.inArray('test',myarray)不是-1` (16认同)
  • 当然,您总是可以定义自己的,更直观的函数,如`$ .isInArray = function(test,array){return $ .inArray(test,array)!== -1; };` (9认同)
  • 感谢@ Chips_100向我们展示了视觉学习者如何正确地做到这一点,如果jQuery可以更新以包含在他们自己的示例中,那将是很好的. (2认同)
  • @JoshPinter不会因为“不是”中的引号而失败吗?如果jQuery.inArray('test',myarray)不是-1,则应为` (2认同)
  • 您也可以使用`if($ .inArray(test,array)> -1){//做事}` (2认同)

Jon*_*Jon 42

$.inArray如果找到则返回元素的索引,如果不是则返回-1 - 不是布尔值.所以正确的是

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


Pat*_*ssa 25

答案来自文档检查的第一段,如果结果大于-1,而不是它是真还是假.

$ .inArray()方法类似于JavaScript的原生.indexOf()方法,因为它在找不到匹配项时返回-1.如果数组中的第一个元素与value匹配,则$ .inArray()返回0.

因为JavaScript将0视为松散等于false(即0 == false,但是0!== false),如果我们检查数组中是否存在值,我们需要检查它是否不等于(或大于)-1.


650*_*502 21

使用正确的方法inArray(x, arr)不使用它在所有的,并使用替代arr.indexOf(x).

官方标准名称也更清楚,因为返回的值是一个索引,因此如果传递的元素是你将获得的第一个元素0(在Javascript中是假的).

(请注意,arr.indexOf(x)无法在Internet Explorer,直到IE9支持,所以如果你需要支持IE8和更早的版本,这将无法工作,而jQuery函数是一个更好的选择.)

  • 我必须同意。inArray 的名称令人困惑。看起来它应该返回一个布尔值,但它的作用与indexOf完全相同 (2认同)

小智 13

inArray返回数组中元素的索引。如果未找到该元素,则返回 -1,否则返回元素索引。

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


Jas*_*son 11

或者,如果您想要有点花哨,可以使用按位非(〜)和逻辑非(!)运算符将inArray函数的结果转换为布尔值.

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

  • 在常见的JavaScript编码标准中,通常禁止/不赞成使用按位运算符.因此,如果您使用linter(jshint,eslint等),您可能无法通过代码审查获得此信息.解决方案有效. (4认同)

DDa*_*Dan 8

我经常使用

if(!(jQuery.inArray("test", myarray) < 0))
Run Code Online (Sandbox Code Playgroud)

要么

if(jQuery.inArray("test", myarray) >= 0)
Run Code Online (Sandbox Code Playgroud)

  • 更好......"if($ .inArray("test",myarray)> -1)` (3认同)

小智 8

jQuery inArray()方法用于搜索数组中的值并返回其索引而不是布尔值.如果未找到该值,则返回-1.

因此,要检查数组中是否存在值,请遵循以下惯例:

myArray = new Array("php", "tutor");
if( $.inArray("php", myArray) !== -1 ) {

    alert("found");
}
Run Code Online (Sandbox Code Playgroud)

参考


Kev*_*sox 7

inArray函数返回作为第一个参数提供的对象的索引,该对象作为函数的第二个参数提供的数组中的函数.

inArray返回0它表明的第一个参数是在所提供的阵列的第一位置上被发现.

inArray在if语句中使用,请使用:

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

inArray-1传递给函数的第一个参数在作为第二个参数传递的数组中找不到时返回.


Sau*_*nki 5

而不是使用jQuery.inArray()你也可以使用includesint数组的方法:

var array1 = [1, 2, 3];

console.log(array1.includes(2));
// expected output: true

var pets = ['cat', 'dog', 'bat'];

console.log(pets.includes('cat'));
// expected output: true

console.log(pets.includes('at'));
// expected output: false
Run Code Online (Sandbox Code Playgroud)

检查官爵这里

  • IE 不支持包含 - :: 使用 indeOf (2认同)