2013-02-23 3 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 }; 

Есть ли лучший способ написания этого?

Я уточнил вопрос с дополнительными деталями, но похоже, что блок IFs является лучшим вариантом.

Настройки сохраняются в .data. Эти настройки являются true/false, и они включают/отключают HTML-элементы. В некоторых случаях в моем сценарии мне нужно проверить эти элементы, чтобы убедиться, что они включены, прежде чем запускать дополнительный код. Например, показывая элементы - если пользователь установил .data для кнопки Nav в true, тогда отобразится кнопка Nav.

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

Существует не очень шаблон для кода внутри состояния, так что я не думаю, что петля является хорошим решением. Опять же, я думаю, что блок IFs - лучший способ пойти, но мне любопытно, есть ли какой-то классный трюк, чтобы написать этот уборщик.

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

Is 'У something' тот же что-то для каждого из них? –

+0

Нет, они все немного разные – Aaron

+0

@Aaron Можем ли мы видеть, как они отличаются? Они часто сочетаются. –

ответ

1

Использование Array.forEach в цикле через каждый элемент проверки, если он отключен:

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

Спасибо;) вы рок – Aaron

+0

@Aaron: Это именно то, что вы говорили, не будет работать. Если код отличается для каждого элемента, вы вернетесь к своему оператору 'if'. –

+0

@ система вы правы. Я проверил ссылку, которая была предоставлена, и сначала это выглядело так, как будто это сработает, однако мне все равно придется включить if ... так что кажется, что оператор if - лучший способ, если вы не можете что-либо рекомендовать? – Aaron

0

Используйте switch заявления ... [заливной текст здесь]

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/switch

+0

Я думал об этом, но выйдет ли инструкция switch после того, как он запустит случай? Это необходимо для проверки условий для каждого ... – Aaron

+1

Да, выключатель обычно срабатывает. Если вам нужно выполнить каждый тест, то (в зависимости от контекста) у вас, вероятно, есть самый ясный метод. –

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

Если вы не один для КИСС,

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

иначе придерживаться МФС.

Смежные вопросы