有没有更好的方法来编写这组IF语句?

时间:2013-02-23 02:46:23

标签: javascript jquery if-statement

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

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。这些设置为true / false,它们启用/禁用HTML元素。在我的脚本中的某些点,我需要检查这些元素,看看它们是否在运行一些额外的代码之前被启用。例如,显示元素 - 如果用户已将导航按钮的.data设置为true,则将显示导航按钮。

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};

谢谢!

4 个答案:

答案 0 :(得分:1)

如果你不是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。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

答案 3 :(得分:0)

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

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

$("#elementA").data("DoSomething", function() { ... });
$("#elementB").data("DoSomething", function() { ... });

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

请注意,生成的代码更详细,因此如果您在多个地方重复使用它,这只是一个优势。