将for循环中的if语句重复放入一个干净的if语句中

时间:2020-08-28 15:32:26

标签: javascript for-loop if-statement

考虑必须检查十亿个条件的情况,如何通过使用for循环将难看的,重复的if语句减少为干净,优雅的if语句。

这是我正在谈论的怪兽的一个例子:

 if (
        x === 0 && y === 1 ||
        x === 2 && y === 3 ||
        x === 4 && y === 5 ||
        x === 6 && y === 7 ||
        x === 8 && y === 9
      ) {
        // do somethig...
      }

2 个答案:

答案 0 :(得分:2)

如果注释正确,并且测试中有一个简单的模式(例如偶数x,奇数y),则只需将该模式写入测试中即可。但是,如果没有,我希望这样的事情可以处理更一般的情况。现在,您可以以声明方式添加任意多个匹配条件。

const matches = [
  [0, 1], [2, 3], [4, 5],
  [6, 7], [8, 9], /* ... */
]

if (matches .some (([a, b]) => x == a && y == b)) {
   // ...
}

Array.prototype.some可用于替换||加入的像这样的集合。如果您想通过&&加入,则可以使用Array.prototype.every

当然,您的内部测试(这里为x == a && y == b)可以是您想要的任何东西。

虽然您可以使用for循环执行类似的操作,但我希望它的表达能力要低得多,而冗长得多。我不推荐。

答案 1 :(得分:1)

最简单的方法就是减少Java语法的麻烦,而不是数学。在所有条件下,y等于x+1x08之间的偶数。通常,如果x被限制在最小和最大之间,您可以这样说:

minx = 0;
maxx = 8;
if (y === x + 1 &&
    x >= minx &&
    x <= maxx &&
    x % 2 === 0) {
    // some code...
}