首页 > 解决方案 > 调用函数时未定义,但并非每次调用都发生

问题描述

我正在使用 codecademy 来学习 JS,并且通过这个函数调用我得到了间歇性的结果。在某些情况下,它会正确显示,但如果我继续重新运行程序,它将在调用的日子里输出 undefined。我究竟做错了什么?

詹姆斯的活动是:一场5K

詹姆斯的训练时间是:未定义的天数

克娄巴特拉的活动是:骑自行车

克娄巴特拉的训练时间是:40天

Frederick 的活动是:5K

Frederick 的训练时间是:未定义的天数

const getRandomEvent = () => {
let random = Math.floor(Math.random() * 3)

if(random === 0){
    return "a 5K"
}
else if(random === 1){
    return "Cycling"
}
else if(random === 2)
   return "Marathon"
}

const getTrainingDays = event =>{
let days;

if(event === "5K"){
    days = 60;
}
else if(event === "Cycling"){
    days = 40;
}
else if(event === "Marathon"){
    days = 250;
}

return days;
}

const event = getRandomEvent();
const days = getTrainingDays(event);

const event2 = getRandomEvent();
const days2 = getTrainingDays(event2);

const event3 = getRandomEvent();
const days3 = getTrainingDays(event3);

const logEvent = (name, event) => console.log(`${name}'s event is: ${event}`);
const logTime = (name, days) => console.log(`${name}'s training time is: ${days} days`);

logEvent("James", event);
logTime("James", days);

logEvent("Cleopatra", event2);
logTime("Cleopatra", days2);

logEvent("Frederick", event3);
logTime("Frederick", days3);

标签: javascript

解决方案


您获取事件的函数将返回a 5Krandom === 0但会getTrainingDays检查event === 5K.

修复您的脚本以检查 event a 5K

您还应该在适当的情况下包含一个 catch all else 语句。

考虑以下内容:

const getRandomEvent = () => {
    let random = Math.floor(Math.random() * 3);
    if (random === 0) { 
        return "a 5K"
    } else if (random === 1) {
        return "Cycling"
    } else if(random === 2) { 
        return "Marathon"
    }
}

const getTrainingDays = event => {
    let days; 
    if (event === "a 5K") { 
        days = 60; 
    } else if (event === "Cycling") {
        days = 40; 
    } else if (event === "Marathon") {
        days = 250;
    } else {
        days = -1;
    }
    return days;
}

推荐阅读