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.
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)
$.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");
}
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.
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.)
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");
}
J'utilise habituellement
if(!(jQuery.inArray("test", myarray) < 0))
ou
if(jQuery.inArray("test", myarray) >= 0)
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");
}
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.
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
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 ()
Il retournera l'index de l'élément dans le tableau. Si ce n'est pas trouvé, vous obtiendrez -1
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
<code>$.inArray()</code>
vs. <code>myArray.indexOf()</code>
vs. <code>myarray.includes()</code>
when tested against
<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>
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;
}
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);
}
});
Homme, regarde le doc .
par exemple:
var arr = [ 4, "Pete", 8, "John" ];
console.log(jQuery.inArray( "John", arr ) == 3);
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");
}