有没有一种简单的方法可以比较条件对而无需嵌套 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();
}
但是,这一切看起来都很冗长。有更好的办法吗?
最佳答案
自 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))
- 我们可以定义 bool 变量以使其清晰:
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))
- 自运营商
>=
和<=
有higher precedence比===
,可以去掉里面的括号:
(x >= 6 === y <= 5)
关于javascript - 比较条件对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44691619/