Finding the average of an array using JS

JavascriptArrays

Javascript Problem Overview


I've been looking and haven't found a simple question and answer on stack overflow looking into finding the average of an array.

This is the array that I have

const grades = [80, 77, 88, 95, 68];

I first thought that the answer to this problem would be something like this:

let avg = (grades / grades.length) * grades.length
console.log(avg)

However, this gave me an output of NaN.

So then I tried this:

for (let grade of grades)
	avg = (grade / grades.length) * grades.length
console.log(avg)

This gave me an output of 68. (I'm not sure why).

So with this I have two questions. 1. Why was my output 68? and 2. Could somebody help me out with actually finding the average of an array?

Javascript Solutions


Solution 1 - Javascript

With ES6 you can turn Andy's solution into as a one-liner:

const average = (array) => array.reduce((a, b) => a + b) / array.length; console.log(average([1,2,3,4,5]));

Solution 2 - Javascript

You calculate an average by adding all the elements and then dividing by the number of elements.

var total = 0;
for(var i = 0; i < grades.length; i++) {
    total += grades[i];
}
var avg = total / grades.length;

The reason you got 68 as your result is because in your loop, you keep overwriting your average, so the final value will be the result of your last calculation. And your division and multiplication by grades.length cancel each other out.

Solution 3 - Javascript

For the second part of your question you can use reduce to good effect here:

const grades = [80, 77, 88, 95, 68];

function getAvg(grades) {
  const total = grades.reduce((acc, c) => acc + c, 0);
  return total / grades.length;
}

const average = getAvg(grades);
console.log(average);

The other answers have given good insight into why you got 68, so I won't repeat it here.

Solution 4 - Javascript

The MacGyver way, just for lulz

var a = [80, 77, 88, 95, 68];

console.log(eval(a.join('+'))/a.length)

Solution 5 - Javascript

There's no built in function, but you can use this to get the sum,

Array.prototype.sum = function() {
    return this.reduce(function(a,b){return a+b;});
};

then divide by the arrays length, e.g.:

var arr = [1,2,3,4,5]
console.log(arr.sum() / arr.length)

Solution 6 - Javascript

It can simply be done with a single reduce operation as follows;

var avg = [1,2,3,4].reduce((p,c,_,a) => p + c/a.length,0);
console.log(avg)

Solution 7 - Javascript

var total = 0
grades.forEach(function (grade) {
    total += grade        
});
console.log(total / grades.length)

Solution 8 - Javascript

The average function you can do is:

const getAverage = (arr) => arr.reduce((p, c) => p + c, 0) / arr.length

Also, I suggest that use the popoular open source tool, eg. Lodash:

const _ = require('lodash')
const getAverage = (arr) => _.chain(arr)
 .sum()
 .divide(arr.length)
 .round(1)
 .value()

Solution 9 - Javascript

You can use map/reduce functions of javascript to find average. Reduce will sum them up, and map will find average.

var avg = grades.map((c, i, arr) => c / arr.length).reduce((p, c) => c + p);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionkdweber89View Question on Stackoverflow
Solution 1 - JavascriptAustinView Answer on Stackoverflow
Solution 2 - JavascriptbwrogaView Answer on Stackoverflow
Solution 3 - JavascriptAndyView Answer on Stackoverflow
Solution 4 - JavascriptMihaiView Answer on Stackoverflow
Solution 5 - JavascriptbaaoView Answer on Stackoverflow
Solution 6 - JavascriptReduView Answer on Stackoverflow
Solution 7 - JavascriptTyler KelleyView Answer on Stackoverflow
Solution 8 - JavascriptWinters HuangView Answer on Stackoverflow
Solution 9 - JavascriptVlad BezdenView Answer on Stackoverflow