【问题标题】:How to create multiple if statements in JavaScript? (closed)如何在 JavaScript 中创建多个 if 语句? (关闭)
【发布时间】:2019-07-03 20:20:10
【问题描述】:

[关闭,因为这两个答案都适用于这个例子,谢谢!]

我正在从动态 JSON 文件中获取值(即通过 ESP8266 从传感器获取其值作为数组),并且我试图为传感器的每个值获取不同的词。但是当我尝试这样做时,条件对多个语句的计算结果为 true。

我需要条件帮助来获取每个值的单词,例如,如果我得到“25”作为值,我需要只显示单词“sad”,而不是单词“anxious”或“happy” .如果我得到值“37”,我只想显示“快乐”。

代码如下:

if (val0 > 40){
 fill(255,0,0);
 textSize(15);
 text('anxious',width/2-50,70); 

} else if (val0 > 35) {
 fill(255,200,0);
 textSize(15);
 text('happy',width/2-50,70); 

} else if (val0 > 20){
 fill(0,0,255);
 textSize(15);
 text('sad',width/2-50,70); 

} else {
 fill(255);
 textSize(15);
 text('nothing',width/2-50,70); 
}

如您所见,我是 js 的新手,所以请指导我一点!

【问题讨论】:

  • 您当前的代码做了哪些不受欢迎的事情?可以发minimal reproducible example吗?
  • 当条件评估为真时,我无法超越“悲伤”,但我需要有不同的状态,所以如果我得到 40,我不能得到“焦虑”,因为它仍然存在真的很“悲伤”。
  • 通过引入一个“边界”数组 ([(-1), 0, 20, 35, 40 (,very high value)]) ..并循环它;
  • 我看不出写的代码有什么问题。每次运行此代码时,它只会执行其中一个分支(但请注意,如果val0 大于 40,它只会评估第一个分支)。如果它真的像你描述的那样表现,或者对控制流有某种误解,这里可能还有其他事情发生。正如CertainPerformance 所说,请提供一个MCVE。

标签: javascript arrays if-statement conditional


【解决方案1】:

您可以使用更多的花括号和制表符来使您的 if 结构更具可读性。

if(condition)
{
//do something
}
else
{
    if(condition)
    {
    //do something
    } 
    else
    {
        if(condition)
        {
        //do something
        } 
    }
}

但我确实认为您的特定问题更适合使用 switch 语句

*****编辑******

switch (true) {
    case (val >= 40):
       //do something
       break;
    case (val >= 35):
        //do something;
        break;
    case (val >= 25):
        //do something;
        break;
    default:
        //do something;
        break;
}

【讨论】:

    【解决方案2】:

    您在 if 语句中应用了错误的条件,考虑数字 45,它将满足所有 3 个条件,即 >40 >35 和 >20,并且代码遇到的第一个条件将适用,即 >40 条件,所以该块内的代码将被执行。您必须在范围内应用条件

    if (val0 >= 40){
     fill(255,0,0);
     textSize(15);
     text('anxious',width/2-50,70); 
    
    } else if (val0 >= 35 && val0<40) {
     fill(255,200,0);
     textSize(15);
     text('happy',width/2-50,70); 
    
    } else if (val0 >= 20 && val0<35){
     fill(0,0,255);
     textSize(15);
     text('sad',width/2-50,70); 
    
    } else {
     fill(255);
     textSize(15);
     text('nothing',width/2-50,70); 
    }

    【讨论】:

    • 多个if/else if/else 无法命中 - 受语言保证 - 一旦找到匹配项,就不再进行检查。
    • 这个答案已被接受,但我仍然觉得它极具误导性。在if 之后放置else 足以确保只执行其中一个分支。如果它不符合if (val0 &gt; 40) 条件,则您知道它不大于40,因此您以后也不需要检查。另请注意,您的范围检查是有缺陷的,因为如果val0 === 40 它将失败第一个和第二个条件并一直下降到else。
    • 在 if 之后放置一个 else 是不够的,OP 对 25(>=20 =35 40)。你不能忽略它们
    猜你喜欢
    • 2012-10-20
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多