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

时间:2013-09-18 08:44:25

标签: 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");
}

我必须将if语句更改为:

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

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

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

20 个答案:

答案 0 :(得分:640)

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

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

if(jQuery.inArray("test", myarray) !== -1)

答案 1 :(得分:37)

如果找到,

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

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

答案 2 :(得分:25)

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

  

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

     

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

答案 3 :(得分:21)

使用inArray(x, arr)的正确方法是完全不使用,而是使用arr.indexOf(x)

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

(请注意,在IE9 之前,Internet Explorer中不支持arr.indexOf(x),因此如果您需要支持IE8及更早版本,这将无效,并且jQuery功能是更好的选择。)

答案 4 :(得分:11)

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

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

答案 5 :(得分:8)

我通常使用

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

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

答案 6 :(得分:7)

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

因此,要检查数组中是否存在值,请按照以下惯例操作:

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

    alert("found");
}

Reference

答案 7 :(得分:6)

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

inArray返回0时,它表示在提供的数组的第一个位置找到了第一个参数。

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

if(jQuery.inArray("test", myarray) != -1) {
    console.log("is in array");
} else {
    console.log("is NOT in array");
}
当在作为第二个参数传递的数组中找不到传递给函数的第一个参数时,

inArray返回-1

答案 8 :(得分:5)

而不是使用jQuery.inArray(),您也可以对int数组使用includes方法:

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

查看官方帖子here

答案 9 :(得分:3)

如果我们想检查元素是否在一组元素中,我们可以做例如:

var checkboxes_checked = $('input[type="checkbox"]:checked');

// Whenever a checkbox or input text is changed
$('input[type="checkbox"], input[type="text"]').change(function() {
    // Checking if the element was an already checked checkbox
    if($.inArray( $(this)[0], checkboxes_checked) !== -1) {
        alert('this checkbox was already checked');
    }
}

答案 10 :(得分:3)

它将返回数组中项的索引。如果找不到,您将获得-1

答案 11 :(得分:3)

jQuery.inArray()返回数组中项的索引,如果找不到项,则返回-1。在此处阅读更多内容:jQuery.inArray()

答案 12 :(得分:2)

/^(one|two|tree)$/i.test(field) // field = Two; // true
/^(one|two|tree)$/i.test(field) // field = six; // false
/^(раз|два|три)$/ui.test(field) // field = Три; // true

这对于检查动态变量很有用。这种方法易于阅读。

答案 13 :(得分:2)

$.inArray()myarray.indexOf()进行完全相同的操作,并返回您要检查数组是否存在的项目的索引。它仅与IE9之前的IE早期版本兼容。最好的选择可能是使用myarray.includes(),它返回布尔值true / false。有关所有这三种方法的输出示例,请参见下面的代码段。

// Declare the array and define it's values
var myarray = ['Cat', 'Dog', 'Fish'];

// Display the return value of each jQuery function 
// when a radio button is selected
$('input:radio').change( function() {

  // Get the value of the selected radio
  var selectedItem = $('input:radio[name=arrayItems]:checked').val();
  $('.item').text( selectedItem );
  
  // Calculate and display the index of the selected item
  $('#indexVal').text( myarray.indexOf(selectedItem) );
  
  // Calculate and display the $.inArray() value for the selected item
  $('#inArrVal').text( $.inArray(selectedItem, myarray) );
  
  // Calculate and display the .includes value for the selected item
  $('#includeVal').text( myarray.includes(selectedItem) );
});
#results { line-height: 1.8em; }
#resultLabels { width: 14em; display: inline-block; margin-left: 10px; float: left; }
label { margin-right: 1.5em; }
.space { margin-right: 1.5em; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Click a radio button to display the output of
&nbsp;<code>$.inArray()</code>
&nbsp;vs. <code>myArray.indexOf()</code>
&nbsp;vs. <code>myarray.includes()</code>
&nbsp;when tested against
&nbsp;<code>myarray = ['Cat', 'Dog', 'Fish'];</code><br><br>

<label><input type="radio" name="arrayItems" value="Cat"> Cat</label>
<label><input type="radio" name="arrayItems" value="Dog"> Dog</label>
<label><input type="radio" name="arrayItems" value="Fish"> Fish</label>  
<label><input type="radio" name="arrayItems" value="N/A"> ← Not in Array</label>
<br><br>

<div id="results">
  <strong>Results:</strong><br>
  <div id="resultLabels">
    myarray.indexOf( "<span class="item">item</span>" )<br>
    $.inArray( "<span class="item">item</span>", myarray )<br>
    myarray.includes( "<span class="item">item</span>" )
  </div>
  <div id="resultOutputs">
    <span class="space">=</span><span id="indexVal"></span><br>
    <span class="space">=</span><span id="inArrVal"></span><br>
    <span class="space">=</span><span id="includeVal"></span>
  </div>
 </div>

答案 14 :(得分:1)

伙计,检查doc

例如:

var arr = [ 4, "Pete", 8, "John" ];
console.log(jQuery.inArray( "John", arr ) == 3);

答案 15 :(得分:1)

由于某种原因,当您尝试检查jquery DOM元素时,它将无法正常工作。因此,重写函数可以解决问题:

function isObjectInArray(array,obj){
    for(var i = 0; i < array.length; i++) {
        if($(obj).is(array[i])) {
            return i;
        }
    }
    return -1;
}

答案 16 :(得分:1)

var abc = {
  "partner": {
    "name": "North East & Cumbria (EDT)",
    "number": "01915008717",
    "areas": {
    "authority": ["Allerdale", "Barrow-in-Furness", "Carlisle"]
    }
  }
};


$.each(abc.partner.areas, function(key, val){
 console.log(val);
  if(jQuery.inArray("Carlisle", val)) {
    console.log(abc.partner.number);
}
});

答案 17 :(得分:0)

没有人使用$代替jQuery

if ($.inArray(nearest.node.name, array)>=0){
   console.log("is in array");
}else{
   console.log("is not in array");
}

答案 18 :(得分:0)

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

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

答案 19 :(得分:-1)

最短最简单的方法是。

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

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