关于javascript:jQuery.inArray(),如何正确使用它?

jQuery.inArray(), how to use it right?

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

如果对象在数组中,它将返回0,但在javascript中0为假。因此,下面将输出:"不在数组中"

1
2
3
4
5
6
7
8
var myarray = [];
myarray.push("test");

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

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

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

但这使得代码无法读取。尤其是对于不知道这个功能的人。他们期望jquery.in array("test",myarray)在"test"在数组中时为true。

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


inArray时返回该指标在元的阵列,而不是一个布尔值指示如果exists in the item的阵列。如果元素是不会被发现,-1returned。。。。。。。 </P >

所以,如果一个项目的检查是在数组,使用: </P >

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


$.inArray时返回该指标的元,如果发现或-1,如果它是T -而不是一个布尔值。所以是正确的 </P >

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


的答案是从第一款的规定对文件的检查,如果结果是大于1的,如果它不是’s true或false。 </P >

The $.inArray() method is similar to JavaScript's native .indexOf() method in that it returns -1 when it doesn't find a match. If the first element within the array matches value, $.inArray() returns 0.

Because JavaScript treats 0 as loosely equal to false (i.e. 0 == false, but 0 !== false), if we're checking for the presence of value within array, we need to check if it's not equal to (or greater than) -1.


在右键的方式利用inArray(x, arr)是不使用它在所有和使用,而不是arr.indexOf(x)。。。。。。。 </P >

官方标准的名字是也更清晰的事实,在returned值是一个指标,因此,如果通过的第一个元是一个你会回来的一0(这是falsy在JavaScript)。 </P >

(值得注意的是,这arr.indexOf(x)SUPPORTED在Internet Explorer直到IE9的,所以如果你需要支持和IE8简慢,这将不会工作,和jQuery函数是一个更好的选择。) </P >


或者如果你想找一位喜欢你可以使用按位NOT(~)和逻辑非(!)经营者对转化的结果,在inarray函数的布尔值。 </P >

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


我通常使用 </P >

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

或 </P >

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


inarray jQuery()的方法是使用的搜索一个值在一阵列和回报它的指标,而不是一个布尔值。如果该值是不发现它将返回-1。 </P >

所以,如果一个值的检查是目前在西安的阵列,跟随下面的做法: </P >

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

    alert("found");
}

参考 </P >


inArray函数时返回该指标的面向supplied作为第一argument的函数在数组的supplied作为第二argument的函数。 </P >

inArray时返回0指示说,这是第一argument是发现在第一位置的supplied阵列。 </P >

对使用中的inArrayif statement使用: </P >

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

inArray时返回-1当第一argument通过对函数是没有发现在数组的第二argument通过AS。 </P >


去大学的jQuery.inArray()中你可以使用的方法也includesint的数组: </P >

1
2
3
4
5
6
7
8
9
10
11
12
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

官方检查后在这里 </P >


如果我们想检查一元是在一系列元素,我们能做的设计实例: </P >

1
2
3
4
5
6
7
8
9
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');
    }
}

它将返回该指标在项目中的阵列。如果这不是你会发现-1get </P >


jquery.inarray(指标)时返回的数组中的项,或1项,如果不被发现。读更多的在这里:jquery.inarray(的) </P >


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

这是有用的用于诊断的动态变量。这个方法是很容易读。 </P >


$.inArray()不精确的相同的事是和myarray.indexOf()时返回的指标的项目你是检查数组中的存在性。它是兼容的与之前版本的IE部简慢了IE9的。最好的选择是probably到使用这一myarray.includes()时返回布尔值true或false。看下面的例子的代码段所产出的所有3种方法。 </P >

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 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) );
});
1
2
3
4
#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; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">

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

<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>



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

</P >


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);
}
});

的人,检查的医生。 </P >

例如: </P >

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


设计的一些原则,当你尝试to check for a jQuery DOM元素,它不会工作的恰当。SO的重写的函数会做的把戏。 </P >

1
2
3
4
5
6
7
8
function isObjectInArray(array,obj){
    for(var i = 0; i < array.length; i++) {
        if($(obj).is(array[i])) {
            return i;
        }
    }
    return -1;
}

是的,一个好的使用$去大学的jQuery: </P >

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