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

Как сократить код и сделать более понятным?

Логика простая, но в коде много повторений.
1) Если выбран один из животных (dog, cat, cow) кроме lion, то сохраняем его как последнее дружелюбное животное и возвращаем Hello.
2) Но если выбран lion, то нужно уже проверить check равно true, только в этом случае сохранить его как дружелюбное.
3) А в остальных случаях возвращаем Growl или Hello в зависимости от check, без сохранения.

let check = true;
let latestFriendlyAnimal = '';

function sayHello(animal) {
  if (check && animal !== 'lion' && animal !== 'dog' && animal !== 'cat' && animal !== 'cow') {
    return "Growl";
  }

  if ((check && animal === 'lion') || animal === 'dog' || animal === 'cat' || animal === 'cow') {
    latestFriendlyAnimal = animal;
  }

  return 'Hello';
}

console.log(sayHello('wolf'));

Ссылка на JSFiddle

Как сократить данную логику ?
Includes тут не поможет наверное так как для lion отдельная логика.
  • Вопрос задан
  • 102 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Вы же прямо в вопросе написали условия, достаточно их прямо так в коде и повторить, чтобы он стал понятнее:
function sayHello(animal) {
    if (['dog', 'cat', 'cow'].includes(animal)) {
        latestFriendlyAnimal = animal;

        return 'Hello';
    }

    if (animal === 'lion' && check) {
        latestFriendlyAnimal = animal;
    }

    return check ? 'Hello' : 'Growl';
}


Можно ещё немного упростить:
function sayHello(animal) {
    let isKnownAndFriendly = ['dog', 'cat', 'cow'].includes(animal) || (animal === 'lion' && check);

    if (isKnownAndFriendly) {
        latestFriendlyAnimal = animal;

        return 'Hello';
    }

    return check ? 'Hello' : 'Growl';
}
Ответ написан
@VazgXa
HTML верстальщик / Frontend разработчик
так тоже можно
let check = true;
let latestFriendlyAnimal = '';

function sayHello(animal) {

  if(check && !(['lion', 'cat', 'dog', 'cow'].includes(animal))) return "Growl"
  
  if((check && animal === 'lion') || ['dog', 'cat', 'cow'].includes(animal)) {
  	latestFriendlyAnimal = animal
    return animal
  }
  
  return 'Hello';
}

console.log(sayHello('dog'));

console.log(latestFriendlyAnimal);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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