web-dev-qa-db-fra.com

jQuery.inArray (), comment l'utiliser correctement?

Pour la première fois, je travaille avec jQuery.inArray() et cela s’avère plutôt étrange.

Si l'objet est dans le tableau, il retournera 0, mais 0 est faux en Javascript. Donc ce qui suit va sortir: "n'est pas dans le tableau"

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

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

Je vais devoir changer la déclaration if en:

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

Mais cela rend le code illisible. Surtout pour quelqu'un qui ne connaît pas cette fonction. Ils s'attendent à ce que jQuery.inArray ("test", myarray) donne true lorsque "test" figure dans le tableau.

Donc ma question est, pourquoi est-ce fait de cette façon? Je n'aime vraiment pas ça. Mais il doit y avoir une bonne raison de le faire comme ça.

285
nbar

inArray renvoie l'index de l'élément dans le tableau, pas un booléen indiquant si l'élément existe dans le tableau. Si l'élément n'a pas été trouvé, -1 sera renvoyé.

Donc, pour vérifier si un élément est dans le tableau, utilisez:

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

$.inArray renvoie le index de l'élément si trouvé ou -1 s'il ne l'est pas - pas une valeur booléenne Donc le bon est

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

La réponse provient du premier paragraphe de la vérification de la documentation si le résultat est supérieur à -1 et non s'il est vrai ou faux.

La méthode $ .inArray () est similaire à la méthode native .indexOf () de JavaScript en ce sens qu'elle renvoie -1 lorsqu'elle ne trouve pas de correspondance. Si le premier élément du tableau correspond à la valeur, $ .inArray () renvoie 0.

Étant donné que JavaScript traite 0 de manière égale avec false (c'est-à-dire 0 == false, mais 0! == false), si nous recherchons la présence de valeur dans un tableau, nous devons vérifier si elle n'est pas égale à (ou supérieure à ) -1.

25
Patsy Issa

La bonne façon d'utiliser inArray(x, arr) est de ne pas l'utiliser du tout et d'utiliser plutôt arr.indexOf(x).

Le nom standard officiel est également plus clair sur le fait que la valeur renvoyée est un index. Ainsi, si l'élément transmis est le premier, vous obtiendrez un 0 (c'est-à-dire un faux en Javascript).

(Notez que arr.indexOf(x) est n'est pas pris en charge dans Internet Explorer avant IE9. Par conséquent, si vous devez prendre en charge IE8 et les versions antérieures, cela ne fonctionnera pas et la fonction jQuery est une meilleure alternative.)

21
6502

Ou si vous voulez avoir un peu de fantaisie, vous pouvez utiliser les opérateurs bitwise not (~) et logical not not!.

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

J'utilise habituellement

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

ou

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

la méthode jQuery inArray () est utilisée pour rechercher une valeur dans un tableau et renvoyer son index, pas une valeur booléenne Et si la valeur n’est pas trouvée, elle retournera -1.

Donc, pour vérifier si une valeur est présente dans un tableau, suivez la pratique ci-dessous:

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

    alert("found");
}

Référence

6
Hassan Amir Khan

La fonction inArray renvoie l'index de l'objet fourni en tant que premier argument de la fonction dans le tableau fourni en tant que second argument de la fonction.

Lorsque inArray renvoie 0, il indique que le premier argument a été trouvé à la première position du tableau fourni.

Pour utiliser inArray dans une instruction if, utilisez:

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

inArray renvoie -1 lorsque le premier argument transmis à la fonction est introuvable dans le tableau transmis en tant que second argument.

6
Kevin Bowersox

au lieu d'utiliser jQuery.inArray(), vous pouvez également utiliser la méthode includes pour int array:

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

vérifier poste officielle ici

5
Saurabh Solanki

jQuery.inArray () renvoie l'index de l'élément dans le tableau, ou -1 si l'élément n'a pas été trouvé. Lisez plus ici: jQuery.inArray ()

3
Darvex

Il retournera l'index de l'élément dans le tableau. Si ce n'est pas trouvé, vous obtiendrez -1

3
Johan

Si nous voulons vérifier qu'un élément est dans un ensemble d'éléments, nous pouvons faire par exemple:

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');
    }
}
/^(one|two|tree)$/i.test(field) // field = Two; // true
/^(one|two|tree)$/i.test(field) // field = six; // false
/^(раз|два|три)$/ui.test(field) // field = Три; // true

Ceci est utile pour vérifier les variables dynamiques. Cette méthode est facile à lire.

$.inArray() fait le EXACT SAME THING as myarray.indexOf() et renvoie l'index de l'élément dont vous vérifiez l'existence dans le tableau. C'est juste compatible avec les versions précédentes de IE avant IE9. Le meilleur choix est probablement d'utiliser myarray.includes() qui renvoie une valeur booléenne true/false. Voir l'extrait ci-dessous pour des exemples de sortie des 3 méthodes.

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

2
MistyDawn

Pour une raison quelconque, lorsque vous essayez de rechercher un élément DOM jQuery, il ne fonctionnera pas correctement. Donc, réécrire la fonction ferait l'affaire:

function isObjectInArray(array,obj){
    for(var i = 0; i < array.length; i++) {
        if($(obj).is(array[i])) {
            return i;
        }
    }
    return -1;
}
1
Joeneter10
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);
}
});
1
abhinavxeon

Homme, regarde le doc .

par exemple:

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

Personne n’utilise $ au lieu de jQuery:

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