Switch Case To/Between

3

在Javascript中,是否有一种方法可以通过switch case结构比较一个整数与另一个整数,而不使用if语句?

例如:

switch(integer) {
    case 1 to 10:
        break;
    case 11 to 20:
        break;
    case 21 to 30:
        break;
}

不行。你可以使用switch(integer < 10) { case true:....}(通过switch比较整数与另一个整数),但我想这并没有什么帮助。 - Felix Kling
啊,好的。我问这个问题是因为看起来使用 if(integer<= 10) 这样的语法比较容易阅读和编写代码。我之前在某个地方见过这种语法,但是现在忘记了在哪里以及用于什么目的。 - Tommy Plummer
4个回答

6

您能进行一些数学计算。

switch(Math.ceil(integer/10)) {
    case 1: // Integer is between 1-10
        break;
    case 2: // Integer is between 11-20
        break;
    case 3: // Integer is between 21-30
        break;
}

太棒了!这样保持了情况的简洁明了。 - daGUY

4

有一种方法,没错。我相当确定在我的代码中会使用if /else结构,但是如果你想使用switch,以下内容也可以正常工作:

switch(true) {
   case integer >= 1 && integer <= 10:
      // 1-10
      break;
   case integer >= 11 && integer <= 20: 
      // 11-20
      break;
   case integer >= 21 && integer <= 30:
      // 21-30
      break;
}

当然,如果你想避免在每个案例中编写>= && <=代码,你可以定义自己的isInRange(num,min,max)类型函数来返回一个布尔值,然后这样说:

switch (true) {
   case isInRange(integer,1,10):
      // 1-10
      break;
   // etc
}

3
正如我在评论中所述,您不能这样做。但是,您可以定义一个inRange函数:
function inRange(x, min, max) {
    return min <= x && x <= max;
}

并且可以与 if - else if 一起使用。这样做可以使其更易于阅读:

if(inRange(integer, 1, 10)) {

}
else if(inRange(integer, 11, 20)) {

}

//...

0

发布 "酷" 语法:P

if( integer in range(0, 10 ) ) {

}
else if ( integer in range( 11, 20 ) ) {



}
else if ( integer in range( 21, 30 ) ) {



}

function range( min, max ){
var o = {}, i ;
    for( i = min; i <= max; ++i ) {
    o[i] = !0;
    }
return o;
}

1
为什么 o[i] = !0o[i] = true 更好?因为更酷吗?;) 每次创建这样的对象似乎是一种浪费,但使用 in 这种方式是很有创意的,我必须承认(虽然可能不太高效)。 - Felix Kling
@FelixKling 是的 :D 除非你必须要使用那个甜蜜的整数范围语法,否则它并没有实际用途。 - Esailija
2
我给你一个“虚拟”的+1,以表彰你的创造力 ;) - Felix Kling
哎呀,这是一个反模式... :P - Šime Vidas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接