【问题标题】:Setting variable across multiple if/then statements跨多个 if/then 语句设置变量
【发布时间】:2019-09-09 17:59:17
【问题描述】:

我正在使用 JS 根据条件语句设置总共 7 个变量,并寻找最有效的方法来做到这一点。

目前,如果您希望每个类别包含多个条件但一个特定条件在该类别中保持不变,则实际上有 16 种不同的条件被分为 3 个不同的类别。此外,还有一个变量必须在所有条件下都保持一致

这是一个例子:

if      (myvar === "A" && var1 === 1 && var2 ==="1")
    {
        setVar = "Value";
    }
else if (myvar === "A" && var1 === 2 && var2 ==="1")
    {
        setVar = "Value";
    }
else if (myvar === "A" && var1 === 3 && var2 ==="1")
    {
        setVar = "Value";
    }
else if (myvar === "B" && var1 === 1 && var2 ==="1")
    {
        setVar = "Value";
    }
else if (myvar === "B" && var1 === 1 && var2 ==="1")
    {
        setVar = "Value";
    }
else if (myvar === "B" && var1 === 1 && var2 ==="1")
    {
        setVar = "Value";
    }

有没有更好的方法来做到这一点?我只想设置一次 var2 的条件并将其应用于所有条件语句。如果我可以为前三个语句设置一次 myvar 的值,为后三个语句设置一次,那会更好。

if      (myvar === "A" && var1 === 1 && var2 ==="1")
    {
        setVar = "Value";
    }
else if (myvar === "A" && var1 === 2 && var2 ==="1")
    {
        setVar = "Value";
    }
else if (myvar === "A" && var1 === 3 && var2 ==="1")
    {
        setVar = "Value";
    }
else if (myvar === "B" && var1 === 1 && var2 ==="1")
    {
        setVar = "Value";
    }
else if (myvar === "B" && var1 === 1 && var2 ==="1")
    {
        setVar = "Value";
    }
else if (myvar === "B" && var1 === 1 && var2 ==="1")
    {
        setVar = "Value";
    }

【问题讨论】:

  • 最后三个条件都一样。那是错字吗? var1 的值是否应该更改为 1,2 和 3?

标签: javascript if-statement


【解决方案1】:

您可以简单地将其他条件句包装在重复条件句中:

if (var2 === "1")
{
    if (myvar === "A" && var1 === 1)
    {
        setVar = "Value";
    }
    else if (myvar === "A" && var1 === 2)
    {
        setVar = "Value";
    }
    else if (myvar === "A" && var1 === 3)
    {
        setVar = "Value";
    }
    else if (myvar === "B" && var1 === 1)
    {
        setVar = "Value";
    }
    else if (myvar === "B" && var1 === 1)
    {
        setVar = "Value";
    }
    else if (myvar === "B" && var1 === 1)
    {
        setVar = "Value";
    }
}

根据需要对其他重叠条件重复此操作。

【讨论】:

    【解决方案2】:

    将控制变量放在一个包装 if 语句中,然后对变化最多的变量使用 switch 语句:

    if(var2 === "1")
    {
        switch(var1)
        {
           case 1:
              if(myvar === "A"){
                 setVar = "Value";
              }else if (myvar === "B"){
                 setVar = "Value";
              }
              break;
    
           case 2:
              if(myvar === "A"){
                 setVar = "Value";
              }else if (myvar === "B"){
                 setVar = "Value";
              }
              break;
    
           case 3:
              if(myvar === "A"){
                 setVar = "Value";
              }else if (myvar === "B"){
                 setVar = "Value";
              }
              break;
        }
    }
    

    您可以通过将 myvar 检查移至三元运算符来进一步压缩此语句,但我只建议在恰好有两个变体时:

    if(var2 === "1")
    {
        switch(var1)
        {
           case 1:
              setVar = myvar === "A" ? "Value" : "Value";
              break;
    
           case 2:
              setVar = myvar === "A" ? "Value" : "Value";
              break;
    
           case 3:
              setVar = myvar === "A" ? "Value" : "Value";
              break;
        }
    }
    

    【讨论】:

    • 这里不能使用三元运算符 - myvar != A is not === B!
    • @LTPCGO 这就是为什么我特别说I only recommend that if there are exactly two variations
    • 即使有两个预期的变体,如果没有额外的代码也不是一个好主意;也许有一个像if(myvar != "A" && myvar != "B") myvar = "B"; 这样的前缀行,但这不会使代码更清晰
    • @LTPCGO 您可以将检查移动到包装子句中,例如if(myvar === "A" || myvar === "B")。如果返回 false,则抛出错误。
    猜你喜欢
    • 2021-02-02
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 2014-05-01
    相关资源
    最近更新 更多