Estoy haciendo una tarea estándar con codewares: escriba la función bmi que calcula el índice de masa corporal (bmi = peso / altura2).
Aquí está mi solución:
function bmi(weight, height) { let bmi = weight / (height ** 2) if (bmi <= 18.5) { return "Underweight"; } else if (bmi <= 25.0) { return "Normal" } else if (bmi <= 30.0) { return "Overweight" } else if (bmi > 30) { return "Obese" } } console.log(bmi(80, 1.80)) Tengo una pregunta: ¿es posible resolver este problema con la ayuda de un interruptor? Porque lo probé de diferentes formas y en la consola tengo undefined :
function bmi(weight, height) { let bmi = weight / (height ** 2) let c = "Normal" switch (bmi) { case "Underweight": bmi <= 18.5; break; case "Normal": bmi <= 25.0; break; case "Overweight": bmi <= 30.0; break; default: return; } } console.log(bmi(80, 1.80))(Gracias al usuario derpirscher por señalar que proporcioné una respuesta completamente incorrecta. Actualicé una respuesta corregida a continuación).
Desafortunadamente, JS no admite esta sintaxis para declaraciones de switch , donde su caso es una comparación compleja con la expresión. Los casos simplemente se comparan con la expresión para una coincidencia simple. Mientras que uno podría hacer algo como esto:
function bmi(weight, height) { let bmi = weight / (height ** 2) let c = "Normal" switch (true) { case bmi <= 18.5: c = "Underweight"; break; case bmi <= 25.0: c = "Normal"; break; case bmi <= 30.0: c = "Overweight"; break; default: c = "Obese" } return c; } console.log(bmi(8, 1.80)) console.log(bmi(80, 1.80)) console.log(bmi(800, 1.80)) Está utilizando el switch para un caso diferente al propósito previsto. Esta no es necesariamente una forma legible o expresiva de escribir esto: creo que su enfoque original con if...else es probablemente preferible a un enfoque basado en switch .