Necesito varios casos en la declaración de cambio en JavaScript, algo así como:
switch (varName)
{
case "afshin", "saeed", "larry":
alert('Hey');
break;
default:
alert('Default case');
break;
}
¿Cómo puedo hacer eso? Si no hay forma de hacer algo así en JavaScript, quiero conocer una solución alternativa que también siga el concepto DRY .
javascript
switch-statement
Afshin Mehrabani
fuente
fuente
Respuestas:
Utilice la función de caída de la
switch
declaración. Se ejecutará un caso coincidente hasta que se encuentre unbreak
(o el final de laswitch
declaración), por lo que podría escribirlo como:fuente
switch('10') { case 1, '10': console.log('ok') }
imprimeok
switch(1)
. La etiqueta aquí es solo una expresión de coma.Esto funciona en JavaScript normal
Salud.
fuente
Aquí hay un enfoque diferente que evita la
switch
declaración por completo:fuente
switch ... case
. Es demasiado fácil olvidar unabreak
declaración, y si usas el fallo intencionalmente, esasbreak
declaraciones olvidadas pueden ser muy difíciles de detectar. Esta versión de búsqueda de métodos también tiene muchas características excelentes queswitch ... case
faltan, como la extensibilidad dinámica o la capacidad de reemplazar completamente el objeto para lograr el cambio de modo. También es más fácil mantenerse limpiamente organizado, y puede conducir a un código más fácil de mantener. Ver ericleads.com/2012/12/switch-case-considered-harmful//fallthrough
en lugar debreak
cada vez que omito intencionalmente elbreak
. Eso ayuda a identificar cuándo es un error y cuándo es intencional.En Javascript para asignar múltiples casos en un interruptor, tenemos que definir
different case without break inbetween
como se muestra a continuación:Por favor, vea el ejemplo, haga clic en el enlace
fuente
Si está utilizando ES6, puede hacer esto:
O para versiones anteriores de JavaScript, puede hacer esto:
Tenga en cuenta que esto no funcionará en navegadores IE más antiguos, pero podría arreglar las cosas con bastante facilidad. Consulte la pregunta para determinar si la cadena está en la lista en JavaScript para obtener más información.
fuente
includes
palabra? Elige tu opción.En el nodo, parece que puedes hacer esto:
Esto hace que el código sea mucho más compacto en algunos casos.
fuente
Agregando y aclarando la respuesta de Stefano, puede usar expresiones para establecer dinámicamente los valores para las condiciones en el interruptor, por ejemplo:
Entonces, en su problema, podría hacer algo como:
aunque no sea tan SECO ...
fuente
varName
dentro de la expresión del caso, espere que varName esté en caché.puede usar el operador ' in ' ...
depende de la invocación de objeto / hash ...
por lo que es tan rápido como javascript puede ser ...
Disfruta, ZEE
fuente
Yo uso así:
fuente
g
bandera, ya que solo usa las expresiones regulares una vez y las tira a la basura. De hecho, si los mantuviera fuera de la función, lag
bandera lo dañaría al intentar hacer coincidir un índice que no sea 0 en.test(
s posteriores . También arreglé un error tipográfico donde el caso del interruptor erasensor
variable y notrue
constante para hacer coincidir expresiones booleanas. Ver la edición.case /officedocument/.test(type) && /presentation/.test(type): iconClass = "far fa-file-powerpoint red"; break;
Depende. Switch evalúa una vez y solo una vez. En un partido, todas las declaraciones de casos posteriores hasta "romper" disparan sin importar lo que diga el caso.
fuente
Me gusta esto por claridad y sintaxis DRY.
fuente
Puedo ver que hay muchas buenas respuestas aquí, pero ¿qué sucede si necesitamos verificar más de 10 casos? Aquí está mi propio enfoque:
fuente
if (accessDenied.includes(varName)) return 'Access Denied!'; return 'Access Allowed.'
es más que suficiente.El problema con los enfoques anteriores es que debe repetir los varios
case
s cada vez que llama a la función que tiene elswitch
. Una solución más robusta es tener un mapa o un diccionario .Aquí un ejemplo
fuente
Puedes hacerlo:
o solo una sola línea de código:
una pequeña mejora de la respuesta de ErikE
fuente
Para cualquiera que viniera aquí con un problema similar que tuve, que me encontré después de semanas de codificación y agotamiento, mi situación era algo similar a:
Siempre el
default
caso ingresado. Si se encuentra con un problema similar de declaración de cambio de casos múltiples, lo que está buscando es:Espero que esto ayude a alguien, me estaba arrancando el pelo antes de recordar usar la caja del interruptor de la misma manera que la uso en mis reductores redux.
fuente
Una de las posibles soluciones es:
fuente
Para mí esta es la forma más simple:
fuente
Otra forma de hacer múltiples casos en la declaración de cambio, cuando está dentro de una función
fuente
Podrías escribirlo así:
fuente
fuente
switch
se supone que funciona la declaración. Es solo quecase "1":
nocase (num = "1"):
.document.getElementById("result").innerHTML = ....
fuera del interruptor y agregar el resultado del valor del día al final?num
pero aún funciona porqueswitch
ya se ha evaluado y la asignación produce el valor. Esto es programación por mutación / aprendizaje automático en su máxima expresión.simplemente cambie la condición del interruptor de acercamiento
fuente
(expression)
entre paréntesis, y el valor de retorno debe ser la entrada. Ver mi respuestaswitch(true) { case (var1 === 0 && var2 === true): {} }