Domanda

I casi di commutazione sono generalmente come

Monday: 
Tuesday: 
Wednesday: 
etc. 

Vorrei usare gli intervalli.

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

È possibile? In ogni caso sto usando javascript / jquery.

È stato utile?

Soluzione

potresti provare ad abusare del passaggio da un comportamento all'altro

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

che è molto dettagliato

oppure potresti 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 ti dà il comportamento che desideri. Il motivo per cui restituisco ! X nell'altro di checkRange è quello di prevenire il problema quando si passa non definito nell'istruzione switch. se la tua funzione restituisce undefined (come nell'esempio di jdk) e passi undefined nello switch, il primo caso verrà eseguito. ! x è garantito per non eguagliare x in nessun test di uguaglianza, ed è così che l'istruzione switch sceglie quale caso eseguire.

Altri suggerimenti

In ritardo alla festa, ma alla ricerca di una risposta alla stessa domanda, mi sono imbattuto in questo thread. Attualmente uso effettivamente 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;
}

Lo trovo molto più facile da leggere di un mucchio di istruzioni IF.

Puoi fare kludges interessanti. Ad esempio, per testare un numero su un intervallo utilizzando un interruttore JavaScript, è possibile scrivere una funzione personalizzata. Fondamentalmente fai in modo che il test funzionale dia un valore n e lo restituisca 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>

Funziona in Google Chrome. Non ho testato altri browser.

No, è necessario utilizzare una serie if / else if per farlo. JavaScript non è così elegante. (Non molte lingue lo sono.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top