【问题标题】:JavaScript, Typescript switch statement: way to run same code for two cases?JavaScript,Typescript switch 语句:两种情况下运行相同代码的方法?
【发布时间】:2011-11-25 10:46:56
【问题描述】:

有没有办法在不复制和粘贴的情况下将两个不同的 case 值分配给同一个代码块?比如68和40以下应该执行相同的代码,而30则不相关。

case 68:
   //Do something
break;

case 40:
   //Do the same thing
break;

case 30:
   //Do something different
break;

认为这样的事情应该有效(即使它显然不起作用)是不正确的吗?

case 68 || 40:
   //Do something
break;

case 30:
   //Do something else
break;

【问题讨论】:

标签: javascript typescript switch-statement


【解决方案1】:

将它们紧挨着放在一起,不间断

switch (myVar) {
  case 68:
  case 40:
    // Do stuff
  break;

  case 30:
    // Do stuff
  break;
}

【讨论】:

  • Sonar 认为这是 innapropiate,¿ 另一种选择?
  • @IgnacioAra 这个问题是针对 Javascript 的。 (虽然同样的代码也适用于 C#)
  • @Steven 是的,我知道,Sonar 支持多种语言 (sonarqube.org)
  • @IgnacioAra 我明白了,我查找了一些有关案例的信息,将它们用作例外似乎很好:sbforge.org/sonar/rules/show/squid:S128?layout=false
  • 我明白你的意思,我希望他们能尽快修复它,将其检测为异常(在声纳工具中)。谢谢!
【解决方案2】:

是的,您只需将相关的case 语句并排放置,如下所示:

case 40:  // Fallthrough
case 68:
   // Do something
   break;

case 30:
   // Do something different
   break;

Fallthrough 评论有两个原因:

  • 它让人类读者放心,您是故意这样做的
  • 它使来自类似 Lint 的工具发出的警告静音,这些工具会发出有关可能意外掉线的警告。

【讨论】:

  • 如果我们像这样添加多个案例,这将是一个“and”案例还是一个“or case”
  • 我不知道您所说的“和大小写”是什么意思。该值不能同时为 40 和 68。如果值为 40,则代码将“做某事”。如果值为 68,它将“做某事”。如果值为 30,它将“做一些不同的事情”。
【解决方案3】:
case 68:
case 40:
  // stuff
  break;

【讨论】:

    【解决方案4】:

    更简洁的方式来做到这一点?

    if ([68, 48, 22, 53].indexOf(value) > -1)
        //Do something
    else if ([44, 1, 0, 24, 22].indexOf(value) > -1)
        //Do another
    

    您可以对具有相同结果的多个值执行此操作

    【讨论】:

      【解决方案5】:

      Switch cases can be clubbed as shown in the dig.

      此外,它不仅限于两种情况,您可以将其扩展到任何情况。案例。

      【讨论】:

      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效
      【解决方案6】:

      你应该使用:

      switch condition {
        case 1,2,3:
          // do something
        case 4,5:
          // do something
        default:
          // do something
      }
      

      大小写应以逗号分隔。

      【讨论】:

      • 这完全是错误的。开关盒中不能有多个值
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多