【发布时间】:2016-01-27 18:29:55
【问题描述】:
我想知道是否有一种方法可以检查同一变量或值的多个条件而不重复该值。
例如,如果我有变量keyCode,并且我想检查它是否大于 102,或小于 48,或介于 65 和 57 之间,或者介于 70 和 97 之间,我必须写这个:
var keyCode = // some value;
if(
keyCode > 102 ||
keyCode < 48 ||
(keyCode > 57 && keyCode < 65) ||
(keycode > 70 && keyCode < 97)
) {
// do something
}
如您所见,我在if 条件下写了keyCode 6 次。如果条件更复杂(这个条件简单地排除了所有非十六进制字符),那么它可能会更加重复。
我想知道是否有办法简化这一点。也许是这样的:
if(
keyCode > 102 || < 48 || (> 57 && < 65) || (> 70 && < 97)
) {
// do something
}
您可以在其中简单地省略变量名并将许多条件放在单个变量上。就像this question 的反面一样,提问者想知道是否有一种方法可以针对单个条件检查多个变量。
我现在正在用 JS 编写代码,但如果您知道任何其他语言的实现,那将来也可能会有所帮助。我认为这会有一个简单的实现,因为我经常使用它,但我惊讶地发现我根本找不到任何关于这样的语言功能的信息。
【问题讨论】:
-
条件的目的是比较,对吧?好吧,您正在尝试删除似乎构建速记条件的比较器之一。那不是一回事。它适用于伪代码,但对于 javascript 中的实际实现,它是不行的
-
@FallenReaper 我觉得它应该是“一件事”。我不喜欢凌乱、重复的代码,我希望有一些速记条件或其他比我必须开始的更优雅的解决方案。你有其他的想法吗?
-
预填充一个数组以用作键代码的查找表以确定其可接受性:
if(ok[keyCode])...,其中数组 like[0,0,0,1,1,0,1...] -
@dandavis 这仅适用于我上面给出的特定情况(具有有限可能性的键码)。这在大多数其他解决方案中都行不通。
-
不知道你的意思,只有这么多键......你可以使用不同的集合:
if(arrArrows[keyCode] || arrPauses[keyCode])
标签: javascript if-statement conditional