Задать вопрос

Как избавиться от большого количества else if?

Здравствуйте, практикую JS, создал небольшую игру где пользователь должен угадать число, но меня смущает наличие большого количества else if, является ли этот подход правильным? Если нет, то как можно переделать код?

import { declOfNum } from "./declofnum.js";

const userInput = document.querySelector('input');
const button = document.querySelector('button');
const number = Math.floor(Math.random() * 10);
const triesTitle = document.querySelector('h2');
const triesSpan = triesTitle.querySelector('span');
let tries = 10;

export function getUserInput() {

    if (userInput.value === '' || userInput.value.length === 0) alert('Ошибка');

    if (tries === 0) return alert('У вас закончились попытки');

    else if (userInput.value == number) return alert('Поздравляю, вы угадали');

    else if (userInput.value > number) {
        alert('Вы ввели слишком большое число');
        tries--;
        triesSpan.textContent = declOfNum(tries, ['попытка', 'попытки', 'попыток']);
        triesTitle.textContent = `У вас осталось ${tries} ${triesSpan.textContent}`;
    }

    else if (userInput.value < number && userInput.value != '' && userInput.value.length != 0) {
        alert('Вы ввели слишком маленькое число');
        tries--;
        triesSpan.textContent = declOfNum(tries, ['попытка', 'попытки', 'попыток']);
        triesTitle.textContent = `У вас осталось ${tries} ${triesSpan.textContent}`;
    }
}   

button.addEventListener('click', getUserInput)
  • Вопрос задан
  • 271 просмотр
Подписаться 3 Простой 3 комментария
Помогут разобраться в теме Все курсы
  • Skillbox
    JavaScript
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик расширенный
    13 месяцев
    Далее
  • Академия Eduson
    Fullstack-разработчик на JavaScript
    11 месяцев
    Далее
Решения вопроса 1
Adamos
@Adamos
let variants = [
  { condition: (tries === 0), alert: 'У вас закончились попытки' },
  { condition: (value == number), alert: 'Поздравляю, вы угадали', returnValue: true },
  { decreaseTries: true }
];
for(let i = 0; i < variants.length; ++i) {
  let v = variants[i];
  if(typeof v.condition === 'undefined' || v.condition) {
    if(v.alert) {
      alert(v.alert);
    }
    if(v.decreaseTries) {
      tries--;
      triesSpan.textContent = declOfNum(tries, ['попытка', 'попытки', 'попыток']);
      triesTitle.textContent = `У вас осталось ${tries} ${triesSpan.textContent}`;
    }
    return v.returnValue || false;
  }
}

Все варианты перечислять не стал, нужные добавляются по аналогии.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы