2012-05-04 2 views
3

У меня есть следующий код в javascript?Могу ли я упростить несколько операторов if-else?

if ($(form).data('action') == "Edit") { 
    xx 
} else if ($(form).data('action') == "Create"){ 
    xy 
} else if ($(form).data('action') == "Delete"){ 
    xz 
} 

Возможно ли, чтобы это упростило это и также имело какой-то путь по умолчанию?

+0

Что вы имеете в виду по пути по умолчанию? – Oleksi

+0

Оператор переключения. Или создайте функции под названием «edit» и выполните $ (form) .data («action»)() {}? Хотя я не уверен, что второй возможен без php –

ответ

11

Можно также создать объект, содержащий ваши действия:

var Actions = { 
    'Edit' : function() {}, 
    'Create' : function() {}, 
    'Delete' : function() {} 
}; 

var action = $(form).data('action'); 

if (Actions.hasOwnProperty(action)) { 
    Actions[action](); 
} 
+1

+1 для моего предпочтительного метода тоже :) – kinakuta

2

Вы должны кэшировать результаты $ (form) .data ('action'); Пример:

var action = $(form).data('action'); 

if (action === 'Edit') { 
    // 
} else if (action === 'Create') { 
    // 
} else if (action === 'Delete') { 
    // 
} 
4

Используйте переключатель, если вы хотите работать с несколькими, если еще

switch(n) 
{ 
case 1: 
    execute code block 1 
    break; 
case 2: 
    execute code block 2 
    break; 
default: 
    code to be executed if n is different from case 1 and 2 
} 
+0

https://developer.mozilla.org/en/JavaScript/Reference/Statements/switch –

-1

Try СЛУЧАЙ здесь: http://www.tutorialspoint.com/javascript/javascript_switch_case.htm

Пример из них:

<script type="text/javascript"> 
<!-- 
var grade='A'; 
document.write("Entering switch block<br />"); 
switch (grade) 
{ 
    case 'A': document.write("Good job<br />"); 
      break; 
    case 'B': document.write("Pretty good<br />"); 
      break; 
    case 'C': document.write("Passed<br />"); 
      break; 
    case 'D': document.write("Not so good<br />"); 
      break; 
    case 'F': document.write("Failed<br />"); 
      break; 
    default: document.write("Unknown grade<br />") 
} 
document.write("Exiting switch block"); 
//--> 
</script> 
+1

Downvoted для того, чтобы не быть особенно хорошим примером источника +. –

1

использование переключателя случае:

var action = $(form).data('action') 
switch(action) 
{ 
case 'Edit': xx; 
break; 
case 'Create': yy; 
break; 
case 'Delete': zz; 
break; 
default: caption ="default"; 
} 

или вы можете использовать тернарный оператор (true? 1: 0)

5

Что это звучит, как вы описываете переключатель/случай, но я не нахожу переключатель случай быть лучше, чем несколько if/else-структур. Я предпочитаю использовать объект хэш:

var actionObj = { 
    "Edit": xx, 
    "Create": xy, 
    "Delete": xz 
}; 

if (actionObj[act]) { 
    // do whatever with actionObj[act] you need to 
} else { 
    // do your default action 
} 

Это особенно хорошо работает, когда значения фактически функция, то вы можете просто назвать их:

var actionObj = { 
    "Edit": function() {}, 
    "Create": function() {}, 
    "Delete": function() {} 
}; 

if (actionObj[act]) { 
    actionObj[act](); 
} else { 
    // default action 
} 
2

Использованием switch блока является самым обычным способом.

Вы можете также функции поиска для выполнения из объекта (HashMap):

var actions = { 
    Edit: function() { 
     // xx 
    }, 
    Create: function() { 
     // xy 
    }, 
    Delete: function() { 
     // xz 
    } 
}; 

var action = actions[$(form).data("action")]; 

if (action) { 
    action(); 
} else { 
    // unknown/default action 
} 
0
var Actions = { 
    'Edit' : function() {}, 
    'Create' : function() {}, 
    'Delete' : function() {}, 
    'default': function() {} 
}, 

action = $(form).data('action'); 
Actions[action]() || Actions[default]();