我的代码中有几个地方我需要在多个不同的变量上测试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};
谢谢!
答案 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)
使用switch
声明... [此处为填充文字]
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/switch
答案 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")(); });
请注意,生成的代码更详细,因此如果您在多个地方重复使用它,这只是一个优势。