1

I'm trying to write a function to calculate the elements average in an array using the parameter (...rest)

Here what I've tried:

function average(...nums) {
  let total = 0;
  
  for (const num of nums) {
    total += num;
  }
  
  return total / nums.length;
}

console.log(average(2, 6));
console.log(average(2, 3, 3, 5, 7, 10));
console.log(average(7, 1432, 12, 13, 100));
console.log(average());

But the last test returns NaN and I don't know why.

adiga
  • 31,610
  • 8
  • 53
  • 74

5 Answers5

2
function average(...nums)
{
    let total = 0;  
    for(const num of nums)
    {
        total +=num;
        n= nums.length;
    }
    return total/n;
}

console.log(average(2, 6));
console.log(average(2, 3, 3, 5, 7, 10));
console.log(average(7, 1432, 12, 13, 100));
console.log(average());
derloopkat
  • 5,980
  • 15
  • 38
  • 42
1

Because you're trying to divide 0 (total) by 0 (nums.length where nums is []), which is NaN in JavaScript.

You can have a check at the top of your function that returns a default value (say, 0), if the list is empty:

function average(...nums) {
    if (!nums.length) return 0;
    let total = 0;
    // rest
}
MrGeek
  • 21,097
  • 4
  • 28
  • 52
0

You are returning 0/0 (which is NaN) when you pass nothing in, as nums becomes an empty array. and its length becomes 0.

You should return nums.length ? total/nums.length : 0;

Abishek Aditya
  • 747
  • 3
  • 11
0

Check it the argument which is an array exists, if not return 0 or some value stating that average cannot be calculated.

function average(...nums) {
  if (!nums.length) {
    return 'Cannot find average'
  }
  let total = 0;
  for (const num of nums) {

    total += num;
  }
  return total / nums.length;
}

console.log(average(2, 6));
console.log(average(2, 3, 3, 5, 7, 10));
console.log(average(7, 1432, 12, 13, 100));
console.log(average());
Eugen Sunic
  • 12,218
  • 8
  • 60
  • 78
0

function average(...inputs) {
    let avg = 0;
    let sum = 0;
    for(const input of inputs){
        sum += input;
        count= inputs.length;
    }
    avg = sum / count;
    return avg;
}

console.log(average(2, 6));
console.log(average(2, 3, 3, 5, 7, 10));
console.log(average(7, 1432, 12, 13, 100));
console.log(average());