2009-10-24 46 views
6

开关的情况下通常是像jquery在开关盒中使用范围?

Monday: 
Tuesday: 
Wednesday: 
etc. 

我想使用的范围。

from 1-12: 
from 13-19: 
from 20-21: 
from 22-30: 

这可能吗?顺便说一句,我正在使用JavaScript/jQuery。

+0

[我如何在使用JavaScript的switch case语句中使用范围?](http://stackoverflow.com/questions/17145723/how-can-i-use-ranges-in-a-switch- case-statement-using-javascript) – Helen 2013-09-01 09:09:11

回答

14

你可以尝试通过行为

var x = 5; 
switch (x) { 
    case 1: case 2: case 3: case 4: ... 
     break; 
    case 13: case 14: case 15: ... 
     break; 
    ... 
} 

这是非常冗长滥用开关秋季

,或者你可以试试这个

function checkRange(x, n, m) { 
    if (x >= n && x <= m) { return x; } 
    else { return !x; } 
} 

var x = 5; 
switch (x) { 
    case checkRange(x, 1, 12): 
     //do something 
     break; 
    case checkRange(x, 13, 19): 
    ... 
} 

这让你你想要的行为。我在checkRange的else中返回!x的原因是为了防止将undefined传递到switch语句中的问题。如果您的函数返回undefined(如jdk的示例所示),并且您将undefined传递给交换机,那么将执行第一种情况。 !x保证不等于x在任何相等的测试下,这是switch语句如何选择执行的情况。

0

不,你需要使用if/else if系列来做到这一点。 JavaScript不是这样的幻想。 (没有多少语言。)

1

您可以制作有趣的杂物。例如,要使用JavaScript开关针对范围测试数字,可以编写自定义函数。基本上有函数测试给定值,并返回它,如果它在范围内。否则返回未定义或其他虚拟值。

<script> 

// Custom Checking Function.. 
function inRangeInclusive(start, end, value) { 
    if (value <= end && value >= start) 
     return value; // return given value 
    return undefined; 
} 

// CODE TO TEST FUNCTION 
var num = 3; 
switch(num) { 
case undefined: 
    //do something with this 'special' value returned by the inRangeInclusive(..) fn 
    break; 
case inRangeInclusive(1, 10, num): 
    alert('in range'); 
    break; 
default: 
    alert('not in range'); 
    break; 
} 

</script> 

这可以在Google Chrome中使用。我没有测试其他浏览器。

+1

如果num未定义,它会工作吗? – barkmadley 2009-10-26 08:15:23

+0

如果num未定义,它不能正常工作。 – 2009-10-26 14:47:20

+0

@barkmadley:我刚刚编辑了代码,并添加了一个未定义值的例子来显式处理它。在inRangeInclusive(..)函数中可能有更好的返回值。接受建议。谢谢。 – 2009-10-26 14:51:14

7

晚会到了,但是在搜索同一个问题的答案时,我遇到了这个线索。目前我实际上使用开关,但方式不同。例如:

switch(true) { 
    case (x >= 1 && x <= 12): 
     //do some stuff 
     break; 
    case (x >= 13 && x <= 19): 
     //do some other stuff     
     break; 
    default: 
     //do default stuff 
     break; 
} 

我发现这比一堆IF语句更容易阅读。

+0

你不能在JavaScript中这样做,它不会评估表达式。 – zuallauz 2011-11-02 02:55:55

+0

不确定你的意思 - 它在我投入它的每个测试案例中都能正常工作。 – stephennmcdonald 2012-06-11 14:56:26