我需要在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;
由于
答案 0 :(得分:14)
想想
if ((state != 10) || (state != 15) || (state != 19) || (state != 22) || (state != 33) || (state != 39) || (state != 47) || (state != 48) || (state != 49) || (state != 51))
装置。 ||
表示"或。"对此的否定是(根据德摩根法律):
state == 10 && state == 15 && state == 19...
换句话说,如果state
同时等于10,15和19(以及你或者声明中的其余数字),这可能是假的唯一方法,这是不可能的
因此,此语句始终为真。例如,状态15永远不会等于状态10,所以总是为真,state
将不等于10或不等于15。
将||
更改为&&
。
此外,在大多数语言中,还有以下内容:
if (x) {
return true;
}
else {
return false;
}
没有必要。在这种情况下,该方法在true
为真时返回x
,在false
为x
时确切返回false
。你可以这样做:
return x;
答案 1 :(得分:4)
您编写的代码将始终返回true
,因为state
不能同时为10和15,以使该语句为false。您需要if ((state != 10) && (state != 15)....
AND
OR
。
请改用$.inArray。这将返回数组中元素的索引。
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;
}
答案 2 :(得分:1)
逻辑OR' ||'如果一旦满足真实条件,则自动短路。
false || false ||是的 || false = true ,在第二个条件停止。
另一方面,逻辑AND&&&'如果一旦遇到错误情况,则自动短路。
false&&真的&&真实&& true = false ,在第一个条件停止。
答案 3 :(得分:0)
更新:使用.indexOf()
检测stat
值是arr
元素之一
纯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");