Je dois utiliser l'opérateur OR dans une instruction jQuery if pour filtrer 10 états. Mon code fonctionne sans exclure qu'un seul état, mais échoue lorsque j'essaie d'inclure plusieurs états. Y a-t-il une manière correcte de faire ceci?
Code que j'utilise:
if ((state != 10) || (state != 15) || (state != 19) ||
(state != 22) || (state != 33) || (state != 39) ||
(state != 47) || (state != 48) || (state != 49) ||
(state != 51))
return true;
Merci
Penser à quoi
if ((state != 10) || (state != 15) || (state != 19) || (state != 22) || (state != 33) || (state != 39) || (state != 47) || (state != 48) || (state != 49) || (state != 51))
veux dire. ||
signifie "ou". La négation de ceci est (d'après les lois de DeMorgan):
state == 10 && state == 15 && state == 19...
En d'autres termes, la seule façon que cela puisse être faux si un state
est égal à 10, 15 et 19 (et le reste des chiffres de votre déclaration ou) en même temps, ce qui est impossible.
Ainsi, cette déclaration sera toujours sera vraie. Par exemple, l’état 15 ne correspond jamais à l’état 10, de sorte que toujours vrai que state
sera différent de 10 ou non.
Remplacez ||
par &&
.
En outre, dans la plupart des langues, les éléments suivants:
if (x) {
return true;
}
else {
return false;
}
n'est pas nécessaire. Dans ce cas, la méthode retourne true
exactement quand x
est vrai et false
exactement quand x
est false
. Vous pouvez juste faire:
return x;
Le code que vous avez écrit retournera toujours true
car state
ne peut pas être à la fois 10 et 15 pour que l'instruction soit fausse. if ((state != 10) && (state != 15)....
AND
est ce dont vous n'avez pas besoin OR
.
Utilisez $ .inArray à la place. Cela retourne l'index de l'élément dans le tableau.
var statesArray = [10, 15, 19]; // list out all
var index = $.inArray(state, statesArray);
if(index == -1) {
console.log("Not there in array");
return true;
} else {
console.log("Found it");
return false;
}
La logique OR '||' court-circuite automatiquement si elle remplit une fois une condition vraie.
faux || faux || vrai || false = true , s'arrête à la deuxième condition.
D'autre part, le ET logique '&&' court-circuite automatiquement s'il rencontre une fois une condition fausse.
false && true && true && true = false , arrête à la première condition.
Mise à jour: en utilisant .indexOf()
pour détecter si la valeur stat
est l'un des éléments arr
JavaScript pur
var arr = [20,30,40,50,60,70,80,90,100];
//or detect equal to all
//var arr = [10,10,10,10,10,10,10];
var stat = 10;
if(arr.indexOf(stat)==-1)alert("stat is not equal to one more elements of array");