我想知道是否有办法检查同一变量或值的多个条件而不重复该值。
例如,如果我有变量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
}
如您所见,我在keyCode
条件下写了if
次6次。如果条件更复杂(这个只是排除了所有非十六进制字符),那么它可能会更加重复。
我想知道是否有办法简化这一点。也许是这样的:
if(
keyCode > 102 || < 48 || (> 57 && < 65) || (> 70 && < 97)
) {
// do something
}
其中您可以简单地省略变量名称,只需在单个变量上放置许多条件。它与this question相反,其中提问者想知道是否有办法根据单一条件检查多个变量。
我现在正在使用JS进行编码,但如果你知道其他任何语言的实现,那么将来也可能会有所帮助。我以为会有一个简单的实现,因为我经常使用它,但我很惊讶地发现我根本无法找到任何语言功能的任何信息。
答案 0 :(得分:3)
简化这一点的唯一方法我知道创建具有有意义名称的单独函数,例如:
function inRange(value, min, max) {
return (value > min) && (value < max);
}
function outRange(value, min, max) {
return (value < min) || (value > max);
}
然后你的情况会是这样的:
if (outRange(keyCode, 48, 102) || inRange(keyCode, 57, 65) || inRange(keyCode, 70, 97) ) {
...
}
这有点容易理解,因为您看到了原始意图,而不是>
<
,并试图了解其实际含义
另一种方法是创建对象rangeChecker
/ notInRangeChecker
,然后创建不同范围检查器的数组并创建函数checkValueAtLeastInOneRange(keyCode, rangesArray)
答案 1 :(得分:2)
没有办法像Sintax那样做明智的事,但你可以做一些事情来试图效仿:
var keyCode = 40
var ranges = [
[102,Infinity],
[0,48],
[57,65],
[70,97]
]
var allowed = ranges.some(function(values){
return keyCode > values[0] && keyCode < values[1]
})
if(allowed){
console.log("allowed")
}else{
console.log("not allowed")
}
答案 2 :(得分:1)
某些语言(如Python)支持链式比较,因此您可以说42 < x <= y < 84
。但是,一般情况下,我个人并不了解您描述的确切功能。不过看起来不错!
对于小型域名,例如密钥代码,您可以将感兴趣的代码放在数组中并测试集合成员资格:
if keyCode in (range(102,256)+range(0,49)+range(58,65)+range(71,97)):
# do something
(+
通过将它们全部放在一个列表中来获取范围的并集。)
答案 3 :(得分:1)
不,你不能删除变量,因为每个条件都由它自己评估。 但是为了重用某些检查,我建议你将它们提取到函数对象(并从另一个文件中获取它):
var keyTester = {
isA: function (keyCode) {
return keyCode > 102;
},
isB: function (keyCode) {
return keyCode < 48;
},
isC: function (keyCode) {
keyCode > 57 && keyCode < 65;
}
};
if (keyTester.isA(keyCode) || keyTester.isB(keyCode) || keyTester.isC(keyCode) ... )
答案 4 :(得分:1)
另一个想法 - 为您的变量使用简短的别名,例如.mobilebtnmenue{
text-align: left;
margin-top: -22px;
margin-left: 35px;
}
.mobile{
position: relative;
z-index: 50;
background: #222;
font-family: 'Varela Round', sans-serif;
font-size: 17px;
display: block;
}
.pushmenu {
display: block;
}
header{
display:block;
height:100px;
}
body{
width:100%;
min-width: 375px;
}
:
_
请确保您不会将if(
(_=keyCode) > 102 || _ < 48 || (_ > 57 && _ < 65) || ( _ > 70 && _ < 97)
) {
// do something
}
用于_
语句中无法丢弃的任何内容:)。 if
只需很少的额外击键就可以保存该值,然后可以使用(_=keyCode)
。 _
和&&
从左到右(reference)进行评估,因此||
应该可以在其余条件下使用_
。
我做了一个快速测试:在谷歌浏览器中,
var x=42;
if((_=x)<99 && _>30) { console.log(x);}
有效(按预期打印42
)。