you_are_enot
@you_are_enot
Пограммист любитель

Как объединить большое количество условий?

Есть обработчик, который принимает параметр, и 10 условий if. Если параметр соответствует условию, выполняется определённое действие. Как написать условие для события, если параметр не соответствует ни одному if? Я использовал следующую конструкцию:
if(a == 1){alert('b')
} else { if(a == 2){alert('c')
} else { alert('d')}}

Но из-за большой вложенности становится неудобно вносить изменения. Другой вариант
if(a == 1){alert(b)};
if(a == 2){alert(c)};
if(a != 1 || a !=2){alert(d)}

тоже не очень удачный. Есть ли другое, более "элегантное" решение?
  • Вопрос задан
  • 213 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Сделайте объект: то, с чем сравниваете, будет именами свойств; то, что выводите, будет их значениями; то, что проверяете - ключ, по которому будет извлекаться значение. Если ничего не получили, подставляете дефолтное значение. Типа вот так:

alert(({
  1: 'b',
  2: 'c'
})[a] || 'd')
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
rockon404
@rockon404
Frontend Developer
Для подобных кейсов хорошо подходит конструкция switch:
switch(a) {
  case 1:
    alert('b');
    break;
  case 2:
    alert('c');
    break;
  default:
    alert('d');
}
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
if (a === 1) {
  do('a');
} else if (a === 2) {
  do('b');
...
} else {
  do('ни один if');
}
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
через switch - можно всё делать....
Пример:
var output=12;
switch (true) {
    case output === 4: alert('4'); break;
    case output === 5: alert('5'); break;
    case output === 6: alert('6'); break;
    case output === 7: alert('7'); break;
    case output === 8: alert('8'); break;
    case (output>=9 && output<=12): alert('>=9 && <=12');break;
    case (output>=13 && output<=15): alert('>=13 && <=15');break;
}
Ответ написан
Комментировать
KickeRocK
@KickeRocK
FrontFinish
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы