2017-08-31 2 views
-2

J'ai un boîtier de commutateur qui n'enregistre rien malgré le fait de remplir les conditions appropriées. Comment fonctionnent-ils exactement? voici le codeComment fonctionnent les boîtiers de commutation?

sClasificacionIMC = '' 
    switch(nIMCDecimal){ 
     case 'Bajo peso': 
      if(nIMCDecimal <18.50){ 
       sClasificacionIMC = 'Bajo peso' 
      } 
     break; 
      case 'Delgadez severa': 
       if(nIMCDecimal <16.00){ 
        sClasificacionIMC = 'Delgadez severa' 
      } 
     break; 
      case 'Delgadez moderada': 
       if(nIMCDecimal > 16.00 && nIMCDecimal < 16.99){ 
        sClasificacionIMC = 'Delgadez moderada' 
       } 
     break; 
      case 'Delgadez leve': 
       if(nIMCDecimal > 17.00 && nIMCDecimal < 18.49){ 
        sClasificacionIMC = 'Delgadez leve' 
       } 
     break; 
      case 'Normal': 
       if(nIMCDecimal > 18.5 && nIMCDecimal < 24.99){ 
        sClasificacionIMC = 'Normal' 
       } 
     break; 
      case 'Sobrepeso': 
       if(nIMCDecimal >= 25.00){ 
        sClasificacionIMC = 'Sobrepeso' 
       } 
     break; 
      case'Preobeso': 
       if(nIMCDecimal > 25.00 && nIMCDecimal < 29.99){ 
        sClasificacionIMC = 'Preobeso' 
       } 
     break; 
      case 'Obesidad': 
       if(nIMCDecimal >= 30.00){ 
        sClasificacionIMC = 'Obesidad' 
       } 
     break; 
      case 'Obesidad leve': 
       if(nIMCDecimal > 30.00 && nIMCDecimal < 34.99){ 
        sClasificacionIMC = 'Obesidad leve' 
       } 
     break; 
      case 'Obesidad media': 
       if(nIMCDecimal > 35.00 && nIMCDecimal < 39.99){ 
        sClasificacionIMC = 'Obesidad media' 
       } 
     break; 
      case 'Obesidad morbida': 
       if(nIMCDecimal >= 40.00){ 
        sClasificacionIMC = 'Obesidad mórbida' 
       } 
     } 

Les résultats (sClasificacionIMC) est réglé pour enregistrer dans un tableau, mais une fois enregistré, il montre juste un champ vide, il ne va pas pour l'un des cas, malgré la satisfaction des critères pour elle.

Aucune erreur de console non plus.

Je suis confus si je dois utiliser nIMCDecimal sur le commutateur (nIMCDecimal) ou si je devrais utiliser le sClasificacionIMC à la place

+1

Que diriez-vous de cela si les conditions? Il semble que nIMCDecimal est une valeur numérique, alors comment cela peut-il être quelque chose comme la chaîne "Bajo peso"? Votre déclaration de commutateur semble être fausse. –

+0

quel est le but de ifs dans le commutateur? – epascarello

+0

Je pensais qu'il avait besoin d'eux pour évaluer la portée du nombre im lui donnant? – IsaacG

Répondre

0

Fermer! Dans ce scénario (et d'autres dans le futur), essayez de ne pas utiliser une instruction switch. C'est beaucoup plus facile d'utiliser simplement if else ici. Voici votre code en utilisant ceux-ci!

const f = function(nIMCDecimal){ 
sClasificacionIMC = '' 

    if(nIMCDecimal<18.50){ 
     sClasificacionIMC = 'Bajo peso' 
    }else if(nIMCDecimal <16.00){ 
     sClasificacionIMC = 'Delgadez severa' 

    }else if(nIMCDecimal > 16.00 && nIMCDecimal < 16.99){ 
     sClasificacionIMC = 'Delgadez moderada' 

    }else if(nIMCDecimal > 17.00 && nIMCDecimal < 18.49){ 
     sClasificacionIMC = 'Delgadez leve' 

    }else if(nIMCDecimal > 18.5 && nIMCDecimal < 24.99){ 
     sClasificacionIMC = 'Normal' 

    }else if (nIMCDecimal >= 25.00){ 
     sClasificacionIMC = 'Sobrepeso' 

    }else if(nIMCDecimal > 25.00 && nIMCDecimal < 29.99){ 
     sClasificacionIMC = 'Preobeso' 

    }else if (nIMCDecimal >= 30.00){ 
     sClasificacionIMC = 'Obesidad' 

    }else if (nIMCDecimal > 30.00 && nIMCDecimal < 34.99){ 
     sClasificacionIMC = 'Obesidad leve' 

    }else if(nIMCDecimal > 35.00 && nIMCDecimal < 39.99){ 
     sClasificacionIMC = 'Obesidad media' 

    }else if (nIMCDecimal >= 40.00){ 
     sClasificacionIMC = 'Obesidad mórbida' 
    } 
    return sClasificacionIMC 
} 
console.log(f(2)) //Bajo peso 
0

Les Mozilla documentation états:

Une instruction switch premier évalue son expression.

Il recherche ensuite la première clause case dont l'expression évalue à la même valeur que le résultat de l'expression d'entrée (en utilisant une comparaison stricte, ===) et transfère le contrôle à cette clause, en exécutant les instructions associées.

(Si plusieurs cas correspondent à la valeur fournie, le premier cas qui correspond est sélectionné, même si les cas ne sont pas égaux entre eux.)

Si aucune clause de cas de correspondance est trouvée, le programme recherche clause default facultative, et si elle est trouvée, transfère le contrôle à cette clause, en exécutant les instructions associées.

Si aucune clause par défaut n'est trouvée, le programme poursuit l'exécution sur l'instruction suivant la fin du commutateur. Par convention, la clause default est la dernière clause, mais elle n'a pas besoin d'être ainsi.

+1

wow qui a besoin de quelques déclarations de retour .... – epascarello

0

Au lieu de switch déclaration que vous devez utiliser le if/else if comme indiqué ci-dessous:

sClasificacionIMC = '' 
if(nIMCDecimal <18.50){sClasificacionIMC = 'Bajo peso'} 
else if(nIMCDecimal <16.00){ sClasificacionIMC = 'Delgadez severa'} 

et ainsi de suite. J'espère que cela aidera.