简化javascript中的嵌套if else语句[关闭]

Posted

技术标签:

【中文标题】简化javascript中的嵌套if else语句[关闭]【英文标题】:Simplify nested if else statement in javascript [closed] 【发布时间】:2021-09-05 06:28:30 【问题描述】:

我目前正在使用 html css 和 javascipt(使用 jquery 库)进行体重指数计算。在 javascript 或其他编程语言中,如何简化多个嵌套的 if else 语句?该代码运行良好,但我很好奇另一种有效的方法(可能是数组或列表?)来减少工作量。

if (age < 18)

   if (age == 9)
       if (bmi < 14)
           $(".Classification").text(underweight)
       
       else if (bmi < 18.6)
           $(".Classification").text(healthy)
       
       else if (bmi < 21)
           $(".Classification").text(overweight)
       
       else if (bmi >= 21)
           $(".Classification").text(obese)
       
   
   else if (age == 10)
       if (bmi < 14.2)
           $(".Classification").text(underweight)
       
       else if (bmi < 19.4)
           $(".Classification").text(healthy)
       
       else if (bmi < 22.2)
           $(".Classification").text(overweight)
       
       else if (bmi >= 22.2)
           $(".Classification").text(obese)
       
   
   else if (age == 11)
       if (bmi < 14.6)
           $(".Classification").text(underweight)
       
       else if (bmi < 20.2)
           $(".Classification").text(healthy)
       
       else if (bmi < 23.2)
           $(".Classification").text(overweight)
       
       else if (bmi >= 23.2)
           $(".Classification").text(obese)
       
   
   else if (age == 12)
       if (bmi < 15)
           $(".Classification").text(underweight)
       
       else if (bmi < 21)
           $(".Classification").text(healthy)
       
       else if (bmi < 24.2)
           $(".Classification").text(overweight)
       
       else if (bmi >= 24.2)
           $(".Classification").text(obese)
       
   
   else if (age == 13)
       if (bmi < 15.4)
           $(".Classification").text(underweight)
       
       else if (bmi < 21.8)
           $(".Classification").text(healthy)
       
       else if (bmi < 25.2)
           $(".Classification").text(overweight)
       
       else if (bmi >= 25.2)
           $(".Classification").text(obese)
       
   
   else if (age == 14)
       if (bmi < 16)
           $(".Classification").text(underweight)
       
       else if (bmi < 22.6)
           $(".Classification").text(healthy)
       
       else if (bmi < 26)
           $(".Classification").text(overweight)
       
       else if (bmi >= 26)
           $(".Classification").text(obese)
       
   
   else if (age == 15)
       if (bmi < 16.6)
           $(".Classification").text(underweight)
       
       else if (bmi < 23.4)
           $(".Classification").text(healthy)
       
       else if (bmi < 26.8)
           $(".Classification").text(overweight)
       
       else if (bmi >= 26.8)
           $(".Classification").text(obese)
       
   
   else if (age == 16)
       if (bmi < 17.2)
           $(".Classification").text(underweight)
       
       else if (bmi < 24.2)
           $(".Classification").text(healthy)
       
       else if (bmi < 27.6)
           $(".Classification").text(overweight)
       
       else if (bmi >= 27.6)
           $(".Classification").text(obese)
       
   
   
   else if (age == 17)
       if (bmi < 17.8)
           $(".Classification").text(underweight)
       
       else if (bmi < 24.8)
           $(".Classification").text(healthy)
       
       else if (bmi < 28.2)
           $(".Classification").text(overweight)
       
       else if (bmi >= 28.2)
           $(".Classification").text(obese)
       
   
   else
       $(".Classification").text("age out of range")
   


 else if (age >= 18) 

   if (bmi < 18.5)
       $(".Classification").text(underweight)
   
   else if (bmi < 25)
       $(".Classification").text(healthy)
   
   else if (bmi < 30)
       $(".Classification").text(overweight)
   
   else if (bmi < 35)
       $(".Classification").text(obeseI)
   
   else if (bmi < 40)
       $(".Classification").text(obeseII)
   
   else if (bmi >= 40)
       $(".Classification").text(obeseIII)
   

 else 
   $(".Classification").text("null")

【问题讨论】:

当您的代码有效时,您可以尝试:codereview.stackexchange.com tbh,如果我正在为我的一位团队成员查看此代码,我最初会遇到嵌套 if/else 语句的问题,但在完成它之后,我会意识到这可能是“可悲的”最优雅的方式。代码审查的一部分是阅读和理解代码的能力。在这种情况下......它易于阅读和理解。因为它基本上是“数学”,所以评论数学计算可能会很好,以便其他人理解它。否则看起来很好。 将年龄/分类放入一个函数并从该函数返回文本将大大减少 $(".Classification").text( 条目并使其可重用(因此它可以进入 .Classification 以外的其他内容)。 定义年龄/范围的对象可能会使代码基本上更短且更易于维护(更容易添加/更改值),但可能难以阅读/理解。 【参考方案1】:

如果您提供带有“决策点”的嵌套数组,则可以大大简化:

function bmi(age,b) 
  const text=["underweight","healthy","overweight","obese","obese II","obese III"],
        o=9:[14,   18.6, 21          ],
          10:[14.2, 19.4, 22.2        ],
          11:[14.6, 20.2, 23.2        ],
          12:[15,   21,   24.2        ],
          13:[15.4, 21.8, 25.2        ],
          14:[16,   22.6, 26          ],
          15:[16.6, 23.4, 26.8        ],
          16:[17.2, 24.2, 27.6        ],
          17:[17.8, 24.8, 28.2        ],
          18:[18.5, 25,   30,  35,  40];
  let sc=o[Math.min(age,18)];
  if (!sc) return "too young for BMI";
  let i=sc.findIndex(v=>v>b);
  if (i==-1) i=sc.length
  return text[i]

const tests=[[8,18],[12,23],[13,25],[14,26],[15,27],[16,16],[17,22],[22,42]];
tests.forEach(([age,b])=>console.log(age+"y, bmi="+b+" : "+bmi(age,b)))

【讨论】:

【参考方案2】:

一种简化/美化if语句的方法是使用switch语句

对于 javascript:https://www.w3schools.com/js/js_switch.asp

【讨论】:

SO 新手,再也不想帮忙了。 再也不想帮忙当然可以理解这种反应:( @MiguelCardoso,没有投反对票,但这不是答案。这应该作为评论发布。 Miguel,它被否决了,因为这不能回答 OP 的问题。但是,我删除了我的反对意见,希望您可以展示一个代码示例,说明 Javascript Case 语句将如何处理此类问题。

以上是关于简化javascript中的嵌套if else语句[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Javascript 一行 If...else...else if 语句

javascript流程控制语句-循环

64 个嵌套的 If/Else 语句是不是不好?

第九课javascript语句运用实例

C语言中三个if语句的嵌套怎理解

Java中条件语句和if-else的嵌套原则