Het gemiddelde van een array vinden met JS [duplicate]

Ik ben aan het zoeken geweest en heb geen simpele vraag en antwoord gevonden over stackoverflow bij het zoeken naar het gemiddelde van een array.

Dit is de array die ik heb

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

Ik dacht eerst dat het antwoord op dit probleem zoiets als dit zou zijn:

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

Dit gaf me echter een output van NaN.

Dus toen probeerde ik dit:

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

Dit gaf me een output van 68. (Ik weet niet zeker waarom).

Dus hierbij heb ik twee vragen. 1. Waarom was mijn output 68? en 2. Kan iemand me helpen met het vinden van het gemiddelde van een array?


Antwoord 1, autoriteit 100%

Je berekent een gemiddelde door alle elementen op te tellen en vervolgens te delen door het aantal elementen.

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

De reden dat je 68 als resultaat hebt gekregen, is omdat je in je lus je gemiddelde blijft overschrijven, dus de uiteindelijke waarde is het resultaat van je laatste berekening. En je deling en vermenigvuldiging met grades.length heffen elkaar op.


Antwoord 2, autoriteit 99%

Met ES6 kun je van Andy’s oplossing een one-liner maken:

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

Antwoord 3, autoriteit 62%

Voor het tweede deel van uw vraag kunt u reducehier met een goed resultaat:

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);

Antwoord 4, autoriteit 45%

One liner uitdaging geaccepteerd

const average = arr => arr.reduce((acc,v) => acc + v) / arr.length;

en dan

average([1,2,3,4]); // 2.5

Antwoord 5, autoriteit 33%

De MacGyver-manier, alleen voor lulz

var a = [80, 77, 88, 95, 68];
console.log(eval(a.join('+'))/a.length)

Antwoord 6, autoriteit 12%

Er is geen ingebouwde functie, maar je kunt dit gebruiken om de som te krijgen,

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

verdeel dan door de lengte van de arrays, bijvoorbeeld:

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

Antwoord 7, autoriteit 10%

Het kan eenvoudig worden gedaan met een enkele bewerking als volgt;

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

Antwoord 8, autoriteit 7%

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

Antwoord 9, autoriteit 7%

De gemiddelde functie die u kunt doen is:

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

Ook raad ik aan om de populaire open source tool te gebruiken, bijv. Lodash:

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

Antwoord 10, autoriteit 2%

Je kunt de kaart/reduce-functies van javascript gebruiken om het gemiddelde te vinden. Verkleinen somt ze op en de kaart vindt het gemiddelde.

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

Antwoord 11

antwoord op uw 1. vraag:

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

avgwordt in elke lus gedeclareerd.
Dus aan het einde van de lus heeft avgde waarde van het laatste item in de array: 68 *5 / 5

Other episodes