web-dev-qa-db-fra.com

En utilisant OR opérateur dans une déclaration jquery if

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

4
Ledattack

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;
12
EJoshuaS

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.

JSFIDDLE DEMO

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;
}
4
Krishna

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.

1
four

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");

0
Mamdouh Freelance