【问题标题】:How to optimize nested if?如何优化嵌套if?
【发布时间】:2016-04-10 11:56:23
【问题描述】:

您好,我想知道有没有更好的方法来做到这一点? condition_a 比 b 更重要,b 比 c 更重要,等等。

var slot = condition_a

if (!slot) {
  slot = condition_b
  if (!slot) {
    slot = condition_c
    if (!slot) {
      slot = condition_d
      if (!slot) {
        slot = condition_e
      }
    }
  }
}

if (slot) {
  //do something
}

【问题讨论】:

  • 没有更好的方法了。无论你做什么都是正确的方式。
  • 不,我 25 岁。只是学习一个爱好。
  • @JaydipJadhav - 有 3 个答案更简洁,而且,如果您了解 javascript,即使是中级编码人员也更易读
  • stackoverflow.com/questions/2922948/… 可能重复?关于该问题的链接文章对条件性能进行了相当好的(但可能已过时)细分。

标签: javascript


【解决方案1】:

你做一个OR:

if (condition_a || condition_b || condition_c || condition_d || condition_e) {
      // do something
}

这相当于您的代码。如果条件评估为true,则不检查以下条件(称为short circuit evaluation)。它可以进行这样的检查:

if (a===null || a.b===0) {

请注意,在同一个地方有这么多条件看起来像是代码异味:可能有些东西在语义上设计得不够充分。

【讨论】:

  • 不知道为什么这会被否决,这似乎是一个完全有效的答案。
  • 我没有投反对票,但我认为他想要if (!condition_a || !condition_b || ... !condition_e)
  • @JaromandaX 再次阅读 OP,他正在检查 slot 而不是 slot 本身的否定。
  • @gurvinder372 - 复习你的逻辑
  • @gurvinder372 他正在检查槽的负数只是为了看看是否需要检查另一个条件
【解决方案2】:

您也可以像这样使用|| 条件,

slot = condition_a||condition_b||condition_c||condition_d;

例如Fiddle

【讨论】:

    【解决方案3】:

    如果您需要 slot 有一个值(而不仅仅是使用它来测试最后的条件)

    var slot = condition_a || condition_b || condition_c || condition_d || condition_e;
    if (slot) {
      // do soemthing
    }
    

    【讨论】:

    • 你没有看到之前相同的答案吗?
    • @DenysSéguret - 不,请告诉我之前的相同答案,您就有机会赢得大奖
    • @Jaromanda X 是的,谢谢,我就是这样做的。 var slot = (a || b || c); if(slot) { slot.dosomething() };
    猜你喜欢
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2018-03-09
    • 2015-10-24
    • 1970-01-01
    • 2016-04-20
    • 2016-12-18
    • 2018-09-16
    相关资源
    最近更新 更多