@nikiGal

Java script, как сделать так чтобы срабатывали все условия if else?

Решаю задачу по функциям, условия задачи написать функцию для расчета количества корма для животных. Где numAnimals количество животных, avgFood количество еды в кг на одного животного. Необходимо чтобы функция возвращала количество еды на всех животных, либо -1 если numAnimals или avgFood меньше нуля или не являются числом. Я написал эту функцию, но у меня срабатывают все условия кроме последнего: else {return numAnimals*avgFood;] Это условие возвращает так же значение -1. понимаю что проблема в if или else if но что не пойму. спасибо за подсказки!
а вот сам код.

function calculateFoodOrder(numAnimals, avgFood) {
var numAnimals = 10;
var avgFood = 3;
if (numAnimals < 0) { return -1; }
else if (numAnimals = String) { return -1; }
else if (avgFood < 0) { return -1; }
else if (avgFood = String) { return -1; }
else
{return numAnimals * avgFood; }
}
console.log(calculateFoodOrder());
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
Tim-A-2020
@Tim-A-2020
https://developer.mozilla.org/ru/docs/Web/JavaScri...
function calculateFoodOrder(numAnimals = 0, avgFood = 0) {
    if(Number.isInteger(numAnimals) && Number.isInteger(avgFood) && numAnimals > 0 && avgFood > 0 ) {
        return numAnimals * avgFood;
    }
    return -1;
}

Короткая запись
const calculateFoodOrder = (n = 0, f = 0) => (Number.isInteger(n) && Number.isInteger(f) && n > 0 && f > 0 ? n * f : -1);




console.log(calculateFoodOrder()); // -1
console.log(calculateFoodOrder(-1,4)); // -1
console.log(calculateFoodOrder(1,3));//3
console.log(calculateFoodOrder([], 200)); // -1
console.log(calculateFoodOrder(Infinity, 200)); // -1
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Alexandre888
@Alexandre888
Javascript-разработчик
все грехи данного кода:

function calculateFoodOrder(numAnimals, avgFood) {
  var numAnimals = 10;
  var avgFood = 3;
  if (numAnimals < 0) {
    return -1;
  } else if (numAnimals = String) {
    return -1;
  } else if (avgFood < 0) {
    return -1;
  } else if (avgFood = String) {
    return -1;
  } else {
    return numAnimals * avgFood;
  }
}

console.log(calculateFoodOrder());


  • = - оператор присваивания, не сравнения.
    чтобы сравнить A с B, вы должны использовать один из операторов сравнения:
    ==, ===, <=, >=, <, > . . .

  • если вы хотите проверить, является ли передаваемое параметру значение строкой, вы должны:
    1. убрать вышеобъявленные переменные с помощью var
    2. проверить, является ли значение параметра numAnimals строкой - это делается с помощью оператора typeof:
    if (typeof numAnimals === "string") { return . . . }


  • чтобы правильно вызвать функцию с таким кодом и получить правильный ответ - вам нужно передать в круглые скобки значения, которые присвоятся параметрам функции (numAnimals и avgFood):
    console.log(  calculateFoodOrder(значение1, значение2)  ) 
    
    console.log(  calculateFoodOrder(550, 241)  ) // пример

    не забывайте, что, если вы передаёте параметру функции строку - вы должны обрамить её в один из доступных видов кавычек (``, '', "").

Ответ написан
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
Зачем проверять на строку? А если будет передан массив или буль?
Если вы ожидаете число, то и проверять нужно на число.

Для улучшения читаемости кода, можно написать отдельную функцию валидации аргумента.

function validArgument(n) {
  return typeof n === 'number' && n >= 0;
}

function calculateFoodOrder(numAnimals, avgFood) {
  if (validArgument(numAnimals) && validArgument(avgFood)) {
    return numAnimals * avgFood;
  }

  return -1;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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