4

I'm working on a codecademy.com lesson with instructions to write the calculateTotal function below. When I click run, it's returning NaN. Anyone know what's wrong with the calculateTotal function as I wrote it that's making it return NaN. Note, I understand that NaN means not a number...

// runner times
var carlos = [9.6,10.6,11.2,10.3,11.5];
var liu = [10.6,11.2,9.4,12.3,10.1];
var timothy = [12.2,11.8,12.5,10.9,11.1];

// declare your function calculateTotal here
var calculateTotal = function(raceTimes){
    var totalTime; 
    for(i = 0; i < raceTimes.length; i++){
        totalTime += raceTimes[i]; 
        return totalTime; 
    }
};

var liuTotal = calculateTotal(liu);

console.log(liuTotal);

Note, many of the people answering this question have said that var totalTime has to be set to "O". However, in the next codecademy lessson, the author writes a function with totalTime not set to anything and it works

var calculateAverage = function (raceTimes) {
  var totalTime;
  for ( i = 0; i < raceTimes.length; i++ ) {
    totalTime = (totalTime || 0) + raceTimes[i];
  }
// assign variable averageTime
var averageTime = totalTime / raceTimes.length; 

  return averageTime;
};
4
  • 3
    Well at least it's not a function returning NyaN Commented Aug 27, 2012 at 21:38
  • 2
    a) You're not setting totaltime to zero (or another value) to initialise it. b) You're returning after only one iteration Commented Aug 27, 2012 at 21:39
  • You don't have to set totalTime to zero. But set it to any number you want, so then you can add a number to a number and get a number. Otherwise it is not a number. Commented Aug 27, 2012 at 21:41
  • @IvanKuckir That's what I said Commented Aug 27, 2012 at 21:44

3 Answers 3

8

Two problems:

  1. totalTime is not defined -- adding something to an undefined results in NaN
  2. You are returning INSIDE your loop.

Fix:

var totalTime=0;
for(i = 0; i < raceTimes.length; i++){
    totalTime += raceTimes[i]; 
}
return totalTime; 
Sign up to request clarification or add additional context in comments.

2 Comments

that's great, but in the next lesson, the codecademy tutors write a function with var totalTime the way that I did, and it works. Why does this function work? var calculateAverage = function (raceTimes) { var totalTime; for ( i = 0; i < raceTimes.length; i++ ) { totalTime = (totalTime || 0) + raceTimes[i]; } // assign variable averageTime var averageTime = totalTime / raceTimes.length; return averageTime; };
(totalTime || 0) tests totalTime on each iteration to see if it's defined or not. If not, it uses zero instead. The first time through the loop, this would result in 0 instead of undefined, so the addition would work. The || operator is a switch - it returns the first operand if it's not falsy or the 2nd operand if it is.
2

You haven't initialized totalTime with a value. So it defaults to undefined. Therefore on each iteration, undefined is being added, yielding NaN.

Comments

2

Your totalTime doesn't have an initial value, so it starts off as undefined. You can't add a number to undefined and get a number:

var totalTime; // implicitly initialized to undefined 
for(i = 0; i < raceTimes.length; i++){
    totalTime += raceTimes[i];  // undefined + raceTimes[i] = NaN
    return totalTime; 
}

Initialize it to 0.

var totalTime = 0;

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.