【问题标题】:Is there a better way to write this set of IF statements?有没有更好的方法来编写这组 IF 语句?
【发布时间】:2013-02-23 13:13:03
【问题描述】:

在我的代码中有几个地方我需要在多个不同的变量上测试是否为真 - 就像这样:

if(setting1){ Do something with El A };
if(setting2){ Do something with El B };
if(setting3){ Do something with El C };
if(setting4){ Do something with El D };

有没有更好的写法?

我已经用额外的细节更新了这个问题,但看起来 IF 块是最好的选择。

设置保存到 .data。这些设置是真/假,它们启用/禁用 HTML 元素。在我的脚本中的某些点,我需要在运行一些附加代码之前检查这些元素以查看它们是否已启用。例如,显示元素 - 如果用户已将 Nav 按钮的 .data 设置为 true - 则将显示 Nav 按钮。

if(setting1){ Do A to El A };

条件中的代码并没有真正的模式,所以我认为循环不是一个好的解决方案。同样,我认为 IF 块是最好的方法,但我很好奇是否有一些很酷的技巧来编写这个更干净的东西。

if(setting1){ Do A to El A};
if(setting2){ Do B to El B};
if(setting3){ Do A to El A};
if(setting4){ Do X to El X};

谢谢!

【问题讨论】:

  • Do something 是不是每个都一样?
  • 不,它们都略有不同
  • @Aaron 我们能看出它们有何不同吗?它们通常可以组合使用。
  • 你是在暗示循环吗?
  • 在我的脚本中出现了几种不同的情况。这些用于测试用户是否启用/禁用了元素。由于我正在使用大约 10 个特定元素,因此我需要测试它们是否启用了该元素,然后运行一些代码。代码特定于每个元素。希望那些对你有帮助。但循环在这种情况下不起作用,因为代码有点不同。如果你没有暗示一个循环,我只是跳枪 - 道歉:p

标签: javascript jquery if-statement


【解决方案1】:

使用Array.forEach 循环检查每个元素是否被禁用:

elements.forEach(function(el) {
    alert(el.disabled);
});

【讨论】:

  • @Aaron:这正是你一直说的行不通的。如果每个元素的代码不同,那么您将返回到您的 if 语句。
  • @你是正确的系统。我检查了提供的链接,起初它看起来可以工作,但是我仍然必须包含一个 if.... 所以似乎 if 语句是最好的方法,除非你可以推荐任何东西?跨度>
【解决方案2】:

如果你不是 KISS 的一员,

var settingsAndEffects = 
[
    {'test': function(params) { return bool; }, // setting1
        'apply': function(params) { ... }}, // Do something with El A
    {'test': function(params) { return bool; }, // setting2
        'apply': function(params) { ... }}, // Do something with El B
    ...
]

for(var i = 0; i < settingsAndEffects.length; i++) 
{
    if(settingsAndEffects[i].test(params))
        settingsAndEffects[i].apply(params);
}

否则坚持 ifs。

【讨论】:

    【解决方案3】:

    【讨论】:

    • 我在想这个,但是switch语句在运行一个case后会退出吗?这需要为每一个测试条件...
    • 是的,开关通常会断开。如果您需要执行每个测试,那么(取决于上下文)您可能拥有最清晰的方法。
    【解决方案4】:

    如果settingsX 是任意的,Do something 也是任意的,并且设置与元素、设置与代码或元素与代码之间没有任何关系,那么我相信您的代码是最小的。我可以建议许多替代方式来表达它们——这可能有助于促进重用,但不会使代码更小——但我需要有关上下文的更多信息。

    例如,如果代码和设置都特定于元素:

    $("#elementA").data("DoSomething", function() { ... });
    $("#elementB").data("DoSomething", function() { ... });
    
    $(".my_elements")
        .filter(function() { return specificSettings(this); })
        .each(function() { $(this).data("DoSomething")(); });
    

    请注意,生成的代码更加冗长,因此只有在多个地方重复使用它才是一个优势。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      相关资源
      最近更新 更多