user7435957
user7435957

Reputation:

Getting the average returns NAN - JS

I am writing a function called "computeAverageOfNumbers".

Given an array of numbers, "computeAverageOfNumbers" returns their average.

Notes:

Here's my code:

function computeAverageOfNumbers(nums) {
  var total = 0;
  for (var i = 0; i < nums.length; i++) {
    total += nums[i];
  }
  var avg = total / nums.length;
  return avg;
}

var input = [];
var output = computeAverageOfNumbers(input);
console.log(output); // --> returns NaN instead of 0

As you can see my code returns NaN when you submit an empty array but works if you put regular array items like var input = [1,2,3,4,5];

If given an empty array, it should return 0.

Am I missing something?

Upvotes: 0

Views: 1694

Answers (4)

Matt
Matt

Reputation: 13399

When you pass an empty array then this line:

var avg = total / nums.length;

Is a division by zero, so avg will be NaN. I would short circuit the function at the start with:

if (nums.length === 0)
    return 0;

Bear in mind ideally you also want to do some type checking to confirm you've got an array, etc. but the above should give you the basics.

Upvotes: 0

brk
brk

Reputation: 50326

Just check if nums.length

function computeAverageOfNumbers(nums) {
  if (nums.length === 0) {
    return 0
  } else {
    var total = 0;
    for (var i = 0; i < nums.length; i++) {
      total += nums[i];
    }
    var avg = total / nums.length;
    return avg;
  }
}

var input = [];
var output = computeAverageOfNumbers(input);
console.log(output);
input = [2,5,9,13];
output = computeAverageOfNumbers(input);
console.log(output);

Upvotes: 0

A Paul
A Paul

Reputation: 8261

Just do below

if( nums.length == 0 ) return 0;

in code

function computeAverageOfNumbers(nums) {
  if (nums.length == 0) return 0;
  var total = 0;
  for (var i = 0; i < nums.length; i++){
    total += nums[i];
  }
  var avg = total / nums.length;
  return avg;
}

Upvotes: 3

Bertrand
Bertrand

Reputation: 1976

When your array is empty, nums.length = 0 and a if you divide a number by 0, it gives you NaN. Just change

var avg = total / nums.length;

to

var avg = (nums.length)?total/nums.length:0

to solve your trouble

Upvotes: 0

Related Questions