jQuery.inArray(),怎么用才对?

IT技术 javascript jquery
2021-02-03 18:28:43

我第一次jQuery.inArray()与它合作,它的行为有点奇怪。

如果对象在数组中,它将返回 0,但 0 在 Javascript 中为 false。因此将输出以下内容:“不在数组中”

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。

所以我的问题是,为什么要这样做?我真的很不喜欢这个。但必须有充分的理由这样做。

6个回答

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

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

if(jQuery.inArray("test", myarray) !== -1)
感谢@Chips_100 向我们展示了视觉学习者如何正确地做到这一点,如果 jQuery 可以更新以将其包含在他们自己的示例中,那就太好了。
2021-03-13 18:28:43
咖啡脚本: if jQuery.inArray('test', myarray) isn't -1
2021-03-22 18:28:43
或者更短:($.isInArray = function(item, array) { return !!~$.inArray(item, array); };我会在一个命名良好的函数中保留这样的神秘代码,以保持意图清晰:))
2021-04-03 18:28:43
你也可以使用 if( $.inArray(test, array) > -1) { // do stuff }
2021-04-07 18:28:43
当然,您始终可以定义自己的、更直观的函数,例如 $.isInArray = function(test,array) { return $.inArray(test, array) !== -1; };
2021-04-11 18:28:43

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

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

答案来自文档检查结果是否大于 -1 的第一段,而不是它是对还是错。

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

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

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

官方标准名称也更加明确,因为返回值是一个索引,因此如果传递的元素是第一个,您将返回 a 0(在 Javascript 中是假的)。

(请注意,arr.indexOf(x)不是在Internet Explorer支持IE9之前,因此,如果您需要支持IE8和更早版本,这将无法工作,而jQuery函数是一个更好的选择。)

每次我$.inArray在一些代码的开头使用我必须去修复一个错误时,我都会呻吟。无论如何,这应该是公认的答案。
2021-03-31 18:28:43
我必须同意。inArray 的名称令人困惑。似乎它应该返回一个布尔值,但它与 indexOf 完全相同
2021-04-05 18:28:43

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

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

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

    alert("found");
}

参考