Нужно получить значение после расчета калькулятора
Написана функция рассчёта каллорий, необходимо вывести значение белков в отдельную переменную, пробовал через return, но в консоле отображается undefined
const result = document.querySelector("#callories span"),
resultProtein = document.querySelector("#protein span");
let sex = "female",
height,
weight,
age,
ratio = 1.2;
function calcTotal() {
if (!sex || !height || !weight || !age || !ratio) {
result.textContent = "____"; //
resultProtein.textContent = "____";
return;
}
//для женщин: 10*вес (кг) + 6,25*рост (см) – 5*возраст (г) – 161.
// для мужчин: 10*вес (кг) + 6,25*рост (см) – 5*возраст (г) + 5;
if (sex === "female") {
result.textContent = Math.round(
(10 * weight + 6.25 * height - 5 * age - 161) * ratio
);
resultProtein.textContent = Math.round(
((10 * weight + 6.25 * height - 5 * age - 161) * ratio) / 4
);
} else {
result.textContent = Math.round(
(10 * weight + 6.25 * height - 5 * age + 5) * ratio
);
resultProtein.textContent = Math.round(
((10 * weight + 6.25 * height - 5 * age + 5) * ratio) / 4
//каллорий с учетом активности / 4
);
return resultProtein;
}
}
calcTotal();
let res = calcTotal();
console.log(res);```
Ответы (1 шт):
Автор решения: RAMe0
→ Ссылка
У вас как минимум 2 проблемы в коде:
- Уже упомянутая в коментариях: второй
IFвозвращает результат только если условиеsex === "female"не равноtrue - Ваша функция всегда будет возвращать
undefined, т.к. в самом начале у вас идет проверкаif (!sex || !height || !weight || !age || !ratio) {, которая всегда будет срабатывать, т.к. проверяемые переменные (height,weightиage) у вас не заданы.
Ну и как уже упомянул в комментарии, лучше разделить логику рассчета и вывода данных. Возможно из-за этого вы запутались.
Как вариант можно сделать так:
const result = document.querySelector("#callories span"),
resultProtein = document.querySelector("#protein span");
// Эти переменные у вас небыли заполнены (в примере). В этом была основная причина undefined
let sex = "female",
height=170,
weight=80,
age=30,
ratio = 1.2;
function calcTotal(sex, height, weight, age, ratio) {
//для женщин: 10*вес (кг) + 6,25*рост (см) – 5*возраст (г) – 161.
// для мужчин: 10*вес (кг) + 6,25*рост (см) – 5*возраст (г) + 5;
let calories, protein
if (sex === "female") {
calories = Math.round(
(10 * weight + 6.25 * height - 5 * age - 161) * ratio
);
protein = Math.round(
((10 * weight + 6.25 * height - 5 * age - 161) * ratio) / 4
);
} else {
calories = Math.round(
(10 * weight + 6.25 * height - 5 * age + 5) * ratio
);
protein = Math.round(
((10 * weight + 6.25 * height - 5 * age + 5) * ratio) / 4
//каллорий с учетом активности / 4
);
}
return { calories, protein };
}
// Проверяем заполнены ли все необходимые переменные. Если нет, выводим ошибку в консоль
if (!sex || !height || !weight || !age || !ratio) {
result.textContent = "____"; //
resultProtein.textContent = "____";
console.error("Один или несколько параметров рассчета не заданы")
}
// иначе делаем расчеты
else {
const { calories, protein } = calcTotal(sex, height, weight, age, ratio);
console.log(calories, protein);
result.textContent = calories
resultProtein.textContent = protein
}
<div id="callories">
<span></span>
</div>
<div id="protein">
<span></span>
</div>