2009-10-24 13 views
6

casi di commutazione sono di solito comejquery Utilizzare gli intervalli nei casi di switch?

Monday: 
Tuesday: 
Wednesday: 
etc. 

Vorrei utilizzare le gamme.

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

È possibile? A proposito, sto usando javascript/jquery.

+0

possibile duplicato di [Come utilizzare gli intervalli in un'istruzione switch case utilizzando JavaScript?] (Http://stackoverflow.com/questions/17145723/how-can-i-use-ranges-in-a-switch- case-statement-using-javascript) – Helen

risposta

14

si potrebbe provare abusando della caduta interruttore attraverso un comportamento

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

che è molto verboso

o si potrebbe provare questo

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): 
    ... 
} 

questo si ottiene il comportamento che vorresti. La ragione per cui restituisco !x nel resto di checkRange è per prevenire il problema di quando si passa undefined nell'istruzione switch. se la funzione restituisce undefined (come fa l'esempio di jdk) e si passa undefined nello switch, quindi verrà eseguito il primo caso. !x è garantito non uguale a x in qualsiasi test di uguaglianza, che è come l'istruzione switch sceglie quale caso da eseguire.

0

No, è necessario utilizzare un if/else if series per fare ciò. JavaScript non è così elegante. (Non molte lingue sono.)

1

È possibile creare chudges interessanti. Ad esempio, per testare un numero su un intervallo utilizzando uno switch JavaScript, è possibile scrivere una funzione personalizzata. Fondamentalmente, la funzione verifica un valore n e lo restituisce se è nell'intervallo. Altrimenti restituito indefinito o qualche altro valore fittizio.

<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> 

Questo funziona in Google Chrome. Non ho provato altri browser.

+1

funziona se num non è definito? – barkmadley

+0

Non funziona come previsto se num non è definito. –

+0

@barkmadley: ho appena modificato il codice e aggiunto un caso per il valore non definito per gestirlo esplicitamente. Potrebbe esserci un valore di ritorno migliore da utilizzare nella funzione inRangeInclusive (..). Aperto ai suggerimenti. Grazie. –

7

In ritardo alla festa, ma dopo aver cercato una risposta alla stessa domanda, mi sono imbattuto in questo thread. Attualmente in realtà uso un interruttore, ma in un modo diverso. Ad esempio:

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; 
} 

Trovo che questo sia molto più facile da leggere rispetto a un gruppo di istruzioni IF.

+0

Non puoi farlo in questo modo in JavaScript, non valuterà le espressioni. – zuallauz

+0

Non sei sicuro di cosa intendi: funziona bene in ogni caso di test che ho lanciato. – stephennmcdonald

Problemi correlati