比较条件对

时间:2017-06-22 06:21:55

标签: javascript if-statement comparison conditional-statements

有没有一种简单的方法来比较条件对而不嵌套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();
}

然而,这一切似乎都很冗长。还有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

由于xy是整数,因此您可以将两个比较结合起来:

if (x >= 6 === y <= 5) {
    ...
}

如果双方都是真的,或者两者都是假的,那么这种情况就会成立。

以下是对此答案的解释。

  1. 最初的问题是简化这种情况:
  2. (x >= 6 && y <= 5) || (x <= 5 && y >= 6)
    
    1. 对于整数,x <= 5x >= 6相反(等效适用于y);因此我们可以将条件写为:
    2. (x >= 6 && y <= 5) || (!(x >= 6) && !(y <= 5))
      
      1. 我们可以定义布尔变量以使其清晰:
      2. let cond1 = x >= 6;
        let cond2 = y <= 5;
        
        (cond1 && cond2) || (!cond1 && !cond2)
        
        1. 其中也可以写成如下:
        2. (cond1 === true && cond2 === true) || (cond1 === false && cond2 === false)
          
          1. 由于truefalse是唯一可能的值,因此上一行等同于
          2. (cond1 === cond2)
            
            1. 放回变量的原始表达式:
            2. ((x >= 6) === (y <= 5))
              
              1. 由于运营商>=<=的{​​{3}}比===多,因此可以删除内部括号:
              2. (x >= 6 === y <= 5)