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
switchdeclaración. Se ejecutará un caso coincidente hasta que se encuentre unbreak(o el final de laswitchdeclaración), por lo que podría escribirlo como:fuente
switch('10') { case 1, '10': console.log('ok') }imprimeokswitch(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
switchdeclaración por completo:fuente
switch ... case. Es demasiado fácil olvidar unabreakdeclaración, y si usas el fallo intencionalmente, esasbreakdeclaraciones 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 ... casefaltan, 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//fallthroughen lugar debreakcada 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 inbetweencomo 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
includespalabra? 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
varNamedentro 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
gbandera, 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, lagbandera 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 erasensorvariable y notrueconstante 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
cases 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
defaultcaso 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
switchse 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?numpero aún funciona porqueswitchya 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): {} }