使用JS查找数组的平均值

时间:2015-04-09 16:47:29

标签: javascript arrays

我一直在寻找并且没有找到关于堆栈溢出的简单问题和答案,寻找找到数组的平均值。

这是我拥有的数组

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

我首先想到这个问题的答案是这样的:

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

然而,这给了我一个NaN的输出。

然后我尝试了这个:

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

这给了我68的输出。(我不知道为什么)。

所以我有两个问题。 1.为什么输出68? 2.有人能帮助我实际找到阵列的平均值吗?

12 个答案:

答案 0 :(得分:30)

您可以通过添加所有元素然后除以元素数来计算平均值。

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

你得到68作为结果的原因是因为在你的循环中,你会一直覆盖你的平均值,所以最后的值将是你上次计算的结果。你的除法和乘以grade.length相互抵消。

更新:在最后一行代码示例中添加;以避免错误。

答案 1 :(得分:21)

对于问题的第二部分,您可以在此处使用reduce效果良好:

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

其他答案已经很清楚你为什么得到68,所以我不会在这里重复。

答案 2 :(得分:15)

使用ES6,你可以将安迪的解决方案变成一个单行:

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

答案 3 :(得分:10)

接受一个班轮挑战

const average = arr => arr.reduce((sume, el) => sume + el, 0) / arr.length;

然后

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

答案 4 :(得分:7)

MacGyver方式,仅适用于lulz

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

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

答案 5 :(得分:6)

没有内置功能,但您可以使用它来获得总和,

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

然后除以数组长度,例如:

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

答案 6 :(得分:5)

可以通过单个reduce操作完成,如下所示;

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

答案 7 :(得分:3)

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

答案 8 :(得分:1)

您可以使用javascript的map / reduce函数来查找平均值。减少将它们相加,地图将找到平均值。

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

答案 9 :(得分:1)

您可以做的平均功能是:

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

另外,我建议使用popoular开源工具,例如。 Lodash

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

答案 10 :(得分:0)

回答你的问题:

for ( var i = 0; i < grades.length; i ++){
    var avg = (grades[i] / grades.length) * grades.length
}
在每个循环中声明

avg。 因此,在循环结束时,avg具有数组中最后一项的值:68 * 5/5

答案 11 :(得分:0)

自己编写平均功能很疯狂。这就是模块存在的原因。我找到了math.js

在我的HTML文件中:

  <script src="http://cdnjs.cloudflare.com/ajax/libs/mathjs/3.2.1/math.min.js"></script>

(或者你可以下载)

在我的JS代码中:

math.mean([1,2,3]) // =2
math.mean(1,2,3) // the same
math.mean(grades)