2013-02-23 160 views
0

有在我的代码一对夫妇点,我需要测试真正的多个不同的变量 - 像这样:有没有更好的方法来编写这组IF语句?

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

谢谢!

+1

是'不要something'每个相同的东西吗? – 2013-02-23 02:48:54

+0

不,他们都略有不同 – Aaron 2013-02-23 02:51:22

+0

@Aaron我们可以看到他们有什么不同吗?它们通常是可组合的。 – 2013-02-23 02:53:06

回答

1

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

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

谢谢;)你摇滚 – Aaron 2013-02-23 03:48:56

+0

@Aaron:这正是你一直说不起作用。如果每个元素的代码不同,那么你回到你的'if'语句。 – 2013-02-23 04:02:59

+0

@你的系统是正确的。我检查了提供的链接,起初它看起来像会起作用,但是我仍然必须包含if ...因此,似乎if语句是最好的方式,除非您可以推荐任何东西? – Aaron 2013-02-23 04:13:48

0
+0

我正在考虑这个,但switch语句会在运行一个case后退出吗?这需要测试每个条件... – Aaron 2013-02-23 02:50:38

+1

是的,一个开关通常会爆发。如果你需要执行每个测试,那么(取决于上下文),你可能有最清晰的方法。 – 2013-02-23 03:00:14

0

如果settingsX是任意的,Do something过,而且也毫无关系的设定和元素,设置和代码之间或元素和代码,那么我相信你的代码是最小的。我可以提出许多其他表达方式 - 这可能有助于促进重用,但不会使代码更小 - 但我需要更多关于上下文的信息。

例如,如果两个密码和设置是特定的元素:

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

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

注意,生成的代码是更详细的,所以这只是如果你在几个地方重新使用它的优势。

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。

相关问题