web-dev-qa-db-ja.com

jquery ifステートメントでOR演算子を使用

JQuery ifステートメントでOR演算子を使用して10個の状態を除外する必要があります。これを行う方法?

私が使用しているコード:

if ((state != 10) || (state != 15) || (state != 19) || 
    (state != 22) || (state != 33) || (state != 39) || 
    (state != 47) || (state != 48) || (state != 49) || 
    (state != 51)) 
   return true;

ありがとう

6
Ledattack

何を考える

if ((state != 10) || (state != 15) || (state != 19) || (state != 22) || (state != 33) || (state != 39) || (state != 47) || (state != 48) || (state != 49) || (state != 51))

手段。 ||は「または」を意味します。これの否定は(DeMorganの法則による)です:

state == 10 && state == 15 && state == 19...

言い換えると、stateが同時に10、15、および19(およびorステートメントの残りの数字)に等しい場合にこれがfalseになる唯一の方法は不可能です。

したがって、このステートメントはalways trueになります。たとえば、状態15が状態10に等しくなることはありません。したがって、stateが10に等しくないか15に等しくないことはalways trueです。

変化する ||から&&

また、ほとんどの言語では、次のものがあります。

if (x) {
  return true;
}
else {
  return false;
}

必要ありません。この場合、メソッドはtrueがtrueのときxを返し、falsexのときfalseを返します。あなたはただすることができます:

return x;

記述したコードは常にtrueを返します。これは、stateが10でも15でもないため、ステートメントがfalseになるためです。 if ((state != 10) && (state != 15)....ANDは、不要なORです。

代わりに $。inArray を使用してください。これは、配列内の要素のインデックスを返します。

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

論理OR '||'は、一度真の条件を満たした場合、自動的に短絡します。

false || false || true || false = true、2番目の条件で停止します。

一方、論理AND '&&'は、一度偽条件を満たした場合に自動的に短絡します。

false && true && true && true = false、最初の条件で停止します。

1
four

更新:.indexOf()を使用して、stat値がarr要素の1つであるかどうかを検出する

純粋なJavaScript

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