Help with Sleep Debt Calculator,

Hi Can’t get the following Script to Stop Producing the word Undefined. Although it is producing the correct string. Can anyone help me with this?


const getSleepHours = (day) => {
  
  switch (day) {
  case "Monday":
  return 7;
  break;
  case "Tuesday":
  return 7;
  break;
  case "Wednesday":
  return 7;
  break;
  case "Thursday":
  return 7;
  break;
  case "Friday":
  return 7;
  break;
  case "Saturday":
  return 7;
  break;
  case "Sunday":
  return 7;
  break;[day]

default:
return "Error."
 
  }
};

//console.log(getSleepHours("Sunday"));

const getActualSleepHours = () => {
  
  return getSleepHours("Monday")
+ getSleepHours("Tuesday")
  + getSleepHours("Wednesday")
    + getSleepHours("Thursday")
      + getSleepHours("Friday")
        + getSleepHours("Saturday")
          + getSleepHours("Sunday") 
      
};

const getIdealSleepHours = () => {//NewFunctionNme
  let idealHours = 7// Created New Variable.
  return idealHours * 7;// Aplied Maths to it.
};

const calculateSleepDebt = () => {//L" NewV
  let actualSleepHours = getActualSleepHours();
  const idealSleepHours = getIdealSleepHours();
  // const idealSleepHours also nV

  if(actualSleepHours === idealSleepHours){
    console.log("You Done Good.")
  }
  }; //, This is the Closing Bracket Related to the Original Function. This else statment will get evaluated if none of the previous conditions are true.

console.log(calculateSleepDebt());

If you are logging within a function and then log the return from that function it will be undefined. return from the function and log at the caller and that will go away.

1 Like

I think that I understand some of what your saying, But

return from the function and log at the caller and that will go away.

I don’t understand what do you mean “return” from the function?
Also, what is the caller?

The function is the callee and the expression that calls it is the caller.

    if(actualSleepHours === idealSleepHours){
      console.log("You Done Good.")  // < change to return
    }
  }; 

console.log(calculateSleepDebt());   // < caller logs return value

The thing to look at is the calculateSleepDebt() function. It has no return value, therefore JS returns, undefinded by default.

If in the above we write,

return "You done good!"

and before the closing brace, write,

return "A little off, there."

or some such, then your function will have explicit return values for both cases.

You Can’t Change that to another Return, because its part of a bigger If statement.


const getSleepHours = (day) => {
  
  switch (day) {
  case "Monday":
  return 7;
  break;
  case "Tuesday":
  return 7;
  break;
  case "Wednesday":
  return 7;
  break;
  case "Thursday":
  return 7;
  break;
  case "Friday":
  return 7;
  break;
  case "Saturday":
  return 7;
  break;
  case "Sunday":
  return 7;
  break;[day]

default:
return "Error."
 
  }
};

//console.log(getSleepHours("Sunday"));

const getActualSleepHours = () => {
  
  return getSleepHours("Monday")
+ getSleepHours("Tuesday")
  + getSleepHours("Wednesday")
    + getSleepHours("Thursday")
      + getSleepHours("Friday")
        + getSleepHours("Saturday")
          + getSleepHours("Sunday")    
};

const getIdealSleepHours = () => {//NewFunctionNme
  let idealHours = 7// Created New Variable.
  return idealHours * 7;// Aplied Maths to it.
};

const calculateSleepDebt = () => {//L" NewV
  let actualSleepHours = getActualSleepHours();
  const idealSleepHours = getIdealSleepHours();
  // const idealSleepHours also nV

  if(actualSleepHours === idealSleepHours){
  console.log("You Done Good.")
  }else if (actualsleephours > idealsleephours) {
  console.log("user got more sleep then needed")
  }else if (actualsleephours < idealsleephours){
  console.log ("you should get some rest")
  }else{ console.log("Error. Something went wrong. Check you code."){
};
  
console.log(calculateSleepDebt());

Then change them all, and drop the else in all cases.

if … return …
if … return …
if … return …
return “Error. …”

The idea is to get away from logging inside the function.

It’s either that, or simply don’t log the call expression at the bottom. Just invoke it.

foo()

i changed them, but still getting an error…?


const getSleepHours = (day) => {
  
  switch (day) {
  case "Monday":
  return 7;
  break;
  case "Tuesday":
  return 7;
  break;
  case "Wednesday":
  return 7;
  break;
  case "Thursday":
  return 7;
  break;
  case "Friday":
  return 7;
  break;
  case "Saturday":
  return 7;
  break;
  case "Sunday":
  return 7;
  break;[day]

default:
return "Error."
 
  }
};

//console.log(getSleepHours("Sunday"));

const getActualSleepHours = () => {
  
  return getSleepHours("Monday")
+ getSleepHours("Tuesday")
  + getSleepHours("Wednesday")
    + getSleepHours("Thursday")
      + getSleepHours("Friday")
        + getSleepHours("Saturday")
          + getSleepHours("Sunday")    
};

const getIdealSleepHours = () => {//NewFunctionNme
  let idealHours = 7// Created New Variable.
  return idealHours * 7;// Aplied Maths to it.
};

const calculateSleepDebt = () => {//L" NewV
  let actualSleepHours = getActualSleepHours();
  const idealSleepHours = getIdealSleepHours();
  // const idealSleepHours also nV

  if(actualSleepHours === idealSleepHours){
  return("You Done Good.")
  }else if (actualsleephours > idealsleephours) {
  return("user got more sleep then needed")
  }else if (actualsleephours < idealsleephours){
  return ("you should get some rest")
  }else{ return 
  ("Error. Something went wrong. Check you code."){
  
  }
}
};  
console.log(calculateSleepDebt());


What is the error message? Is in the console or is it an SCT message?

Screenshot 2020-11-25 at 03.17.19

There is some stray syntax (the curly braces) and return cannot be on its own line followed by a line break.

return expression

must be on the same line.

Aside

return values don’t have to be in parens. It is not a function.

The first condition works. That Undefined has gone. But when I changed the values in the actualsleephours Function it returned another error message?

Screenshot 2020-11-25 at 03.25.07

Compare that to the error message. An easy fix.

1 Like

This topic was automatically closed 41 days after the last reply. New replies are no longer allowed.