考虑必须检查十亿个条件的情况,如何通过使用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...
}
答案 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+1
,x
是0
和8
之间的偶数。通常,如果x
被限制在最小和最大之间,您可以这样说:
minx = 0;
maxx = 8;
if (y === x + 1 &&
x >= minx &&
x <= maxx &&
x % 2 === 0) {
// some code...
}