0

I'm new to JavaScript and am currently learning about functions. Whenever I try to print this to the console, it is being returned as undefined. I'm sure its something super simple, but what am I missing? Here is my code:

let getSleepHours = day => {
  switch (day) {
    case 'monday':
      return 8;
      break;
    case 'tuesday':
      return 7;
      break;
    case 'wednesday':
      return 6;
      break;
    case 'thursday':
      return 9;
      break;
    case 'friday':
      return 10;
      break;
    case 'saturday':
      return 8;
      break;
    case 'sunday':
      return 11;
      break;
    default:
      return 'error';
  }
}
const getActualSleepHours = () => {
  return
  getSleepHours('monday') +
    getSleepHours('tuesday') +
    getSleepHours('wednesday') +
    getSleepHours('thursday') +
    getSleepHours('friday') +
    getSleepHours('saturday') +
    getSleepHours('sunday');
};
console.log(getActualSleepHours());
Sheraff
  • 5,730
  • 3
  • 28
  • 53
Daniel V
  • 9
  • 1

3 Answers3

2

it returns undefined because of this line

const getActualSleepHours=()=>{ return

here there is nothing returned after return keyword, so Javascript will consider its undefined.

you should do this:

const getActualSleepHours =() =>{ 
  return getSleepHours('monday')+
  getSleepHours('tuesday')+
  getSleepHours('wednesday')+
  getSleepHours('thursday')+
  getSleepHours('friday')+
  getSleepHours('saturday')+
  getSleepHours('sunday');

};

Full snippet:

let getSleepHours = day => {
  switch (day) {
    case 'monday':
      return 8;
      break;
    case 'tuesday':
      return 7;
      break;
    case 'wednesday':
      return 6;
      break;
    case 'thursday':
      return 9;
      break;
    case 'friday':
      return 10;
      break;
    case 'saturday':
      return 8;
      break;
    case 'sunday':
      return 11;
      break;
    default:
      return 'error';
  }
}
const getActualSleepHours =() =>{ 
  return getSleepHours('monday')+
  getSleepHours('tuesday')+
  getSleepHours('wednesday')+
  getSleepHours('thursday')+
  getSleepHours('friday')+
  getSleepHours('saturday')+
  getSleepHours('sunday');

};
console.log(getActualSleepHours());
Julian
  • 33,915
  • 22
  • 119
  • 174
asmaa
  • 715
  • 5
  • 15
2

You have your answer. Just for fun: your code can be simplified a little. Now it's thursday over here, so I'm going to get my 9 hours sleep :P

// just use an object
const getSleepHours = {
  monday: 8,
  tuesday: 7,
  wednesday: 6,
  thursday: 9,
  friday: 10,
  saturday: 8,
  sunday: 11
};
// and create the string using a template string
// btw without brackets in the arrow function
// there's no need for 'return'
const getActualSleepHours = () =>
  `${getSleepHours.monday} ${
     getSleepHours.tuesday} ${
     getSleepHours.wednesday} ${
     getSleepHours.thursday} ${
     getSleepHours.friday} ${
     getSleepHours.saturday} ${
     getSleepHours.sunday}`;

console.log(getActualSleepHours());

// or, as noted in comments, even easier
console.log(Object.values(getSleepHours).join(` `)); 
.as-console-wrapper { top: 0; max-height: 100% !important; }
KooiInc
  • 119,216
  • 31
  • 141
  • 177
1

I know this wasn't your question, but while you are learning JS, consider refactoring this imperative snippet as a data structure:

const getSleepHours = day => {
  const hours = {
    'monday': 8,
    'tuesday': 7,
    'wednesday': 6,
    'thursday': 9,
    'friday': 10,
    'saturday': 8,
    'sunday': 11
   }
   return hours[day] || 'error';
}

Whenever you find yourself writing repetitive code, it is usually a sign that there is a data structure in your program that you are creating manually.

Josh Wulf
  • 4,727
  • 2
  • 20
  • 34