jquery Usando gli intervalli nei casi switch?
-
06-07-2019 - |
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.
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.)