2009-10-24 12 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

答えて

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は、switch文がどのcaseを実行するかをどのように選択するかという等価性のテストでは、xと等しくないことが保証されています。

0

いいえ、これを行うにはif/else ifシリーズを使用する必要があります。 JavaScriptはこのファンシーではありません。 (多くはない言語がある。)

1

あなたは興味深いkludgesを作ることができます。たとえば、JavaScriptスイッチを使用して数値を範囲に対してテストするには、カスタム関数を記述できます。基本的には、機能テストにn値を与え、それが範囲内にあればそれを返す。それ以外の場合は、未定義またはその他のダミー値が返されます。

<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

+0

numが未定義の場合、期待どおりに機能しません。 –

+0

@barkmadley:コードを編集し、未定義の値を明示的に処理するためのケースを追加しました。 inRangeInclusive(..)関数で使用する方が良い戻り値があるかもしれません。提案に開放されています。ありがとう。 –

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

+0

あなたが何を意味するのかわからない - それは私がそれに投げたすべてのテストケースでうまく動作します。 – stephennmcdonald

関連する問題