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

Как избавиться от большого количества 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)
  • Вопрос задан
  • 251 просмотр
Подписаться 3 Простой 3 комментария
Решения вопроса 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;
  }
}

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

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

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