Estoy trabajando en una función usando Javascript que según un valor recibido (una nota) te devuelve la calificación de esa nota, según el sistema educativo español. El código es el siguiente:
function calculateSpanishClassAverageMark(averageMark) { console.log("me muestra mi nota media", averageMark); var markText = " "; switch (averageMark) { case 10: markText = "Esta clase ha obtenido una matrícula de honor" break; case averageMark >= 9 && averageMark < 10: markText = "Esta clase ha obtenido un sobresaliente" break; case averageMark >= 7 && averageMark < 9: markText = "Esta clase ha obtenido un notable" break; case averageMark >= 6 && averageMark < 7: markText = "Esta clase ha obtenido un bien" break; case averageMark >= 5 && averageMark < 6: markText = "Esta clase ha obtenido un suficiente" break; case averageMark >= 4 && averageMark < 5: markText = "Esta clase ha obtenido un insuficiente" break; case averageMark < 4: markText = "Esta clase ha obtenido un muy deficiente" break; default: break; } return console.log("Marktext", markText); } El primer console.log me muestra mi nota media 7.625 por lo que se está recibiendo el parámetro averageMark. Sin embargo, el archivo console.log que devuelvo muestra lo siguiente: Marktext . He intentado depurar, y el comportamiento es que cuando el programa llega al interruptor, va directamente a la opción predeterminada, por lo que no cambia el valor de markText . ¿Dónde estoy cometiendo un error? No entiendo por qué si el valor de averageMark es 7.625 , por qué no entra en ese caso del interruptor. Gracias.
La declaración de switch es para seleccionar valores particulares, no rangos.
La declaración de cambio es para seleccionar valores particulares, no rangos.
Esto es cierto, pero hay un truco para usar el switch como selector de rango. Obviamente, si averageMark no es un número entre 0 y 10, el conmutador elegirá la opción default o, si es superior a 10, elegirá el segundo caso.
function FirstCalc(averageMark) { var markText = " "; switch (true) { case (averageMark == 10): markText = "Esta clase ha obtenido una matrícula de honor" break; case (averageMark >= 9): markText = "Esta clase ha obtenido un sobresaliente" break; case (averageMark >= 7): markText = "Esta clase ha obtenido un notable" break; case (averageMark >= 6): markText = "Esta clase ha obtenido un bien" break; case (averageMark >= 5): markText = "Esta clase ha obtenido un suficiente" break; case (averageMark >= 4): markText = "Esta clase ha obtenido un insuficiente" break; default: markText = "Esta clase ha obtenido un muy deficiente // default option !" break; } return averageMark + " // " + markText; } $('#firstRes').append(FirstCalc(0) + '<br/>'); $('#firstRes').append(FirstCalc(2) + '<br/>'); $('#firstRes').append(FirstCalc(4) + '<br/>'); $('#firstRes').append(FirstCalc(6) + '<br/>'); $('#firstRes').append(FirstCalc(8) + '<br/>'); $('#firstRes').append(FirstCalc(10) + '<br/>'); $('#firstRes').append(FirstCalc(55) + '<br/>'); $('#firstRes').append(FirstCalc(1.25) + '<br/>'); $('#firstRes').append(FirstCalc("word") + '<br/>'); <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="firstRes"></div>