有没有一种简单的方法来比较条件对而不嵌套if / else语句?换句话说,如何将以下两个比较合并为一个比较?
(x >= 6 && y <= 5)
,(y >= 6 && x <= 5)
我想做的是这样的事情:
if ((x >= 6 && y <= 5) || (y >= 6 && x <=5)) // do this
我知道你可以这样做:
if (x >= 6) {
if (y <= 5)
} else {
if (y >= 6)
}
但是这个方法的问题是我想为每种情况执行相同的代码块。我知道我可以通过执行以下操作而不重复代码来实现此目的:
if (x >= 6) {
if (y <= 5) doThis();
} else {
if (y >= 6) doThis();
}
然而,这一切似乎都很冗长。还有更好的方法吗?
答案 0 :(得分:3)
由于x
和y
是整数,因此您可以将两个比较结合起来:
if (x >= 6 === y <= 5) {
...
}
如果双方都是真的,或者两者都是假的,那么这种情况就会成立。
以下是对此答案的解释。
(x >= 6 && y <= 5) || (x <= 5 && y >= 6)
x <= 5
与x >= 6
相反(等效适用于y);因此我们可以将条件写为:(x >= 6 && y <= 5) || (!(x >= 6) && !(y <= 5))
let cond1 = x >= 6;
let cond2 = y <= 5;
(cond1 && cond2) || (!cond1 && !cond2)
(cond1 === true && cond2 === true) || (cond1 === false && cond2 === false)
true
和false
是唯一可能的值,因此上一行等同于(cond1 === cond2)
((x >= 6) === (y <= 5))
>=
和<=
的{{3}}比===
多,因此可以删除内部括号:(x >= 6 === y <= 5)