Javascript 使用JS查找数组的平均值

Javascript 使用JS查找数组的平均值,javascript,arrays,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

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

这是我拥有的数组

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)
for(变量i=0;i
这给了我68的输出。(我不知道为什么)


所以我有两个问题。1.为什么我的产出是68?二,。有人能帮我找到一个数组的平均值吗?

将所有元素相加,然后除以元素数,计算出一个平均值

var total = 0;
for(var i = 0; i < grades.length; i++) {
    total += grades[i];
}
var avg = total / grades.length;
var总计=0;
对于(变量i=0;i

之所以得到68作为结果,是因为在循环中,不断覆盖平均值,因此最终值将是上次计算的结果。还有你的分数除法和乘法。长度相互抵消。

对于你问题的第二部分,你可以在这里使用:

const grades=[80,77,88,95,68];
功能getAvg(等级){
const total=等级。reduce((acc,c)=>acc+c,0);
返回总/等级.长度;
}
常数平均值=getAvg(等级);

控制台日志(平均值)回答您的1。问题:

for ( var i = 0; i < grades.length; i ++){
    var avg = (grades[i] / grades.length) * grades.length
}
for(变量i=0;i
avg
在每个循环中声明。
因此,在循环结束时,
avg
具有数组中最后一项的值:68*5/5

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

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)

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

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

它可以简单地通过一个reduce操作完成,如下所示:

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

console.log(avg)
使用ES6,您可以将Andy的解决方案转换为一行程序:

let average=(array)=>array.reduce((a,b)=>a+b)/array.length;

log(平均值([1,2,3,4,5])MacGyver路,就为了lulz

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

console.log(eval(a.join(+)/a.length)
您可以执行的平均函数是:

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

接受一轮挑战

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

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

这个代码不起作用。例如,
gradesTotal
在哪里使用?哇!之前的退格有点疯狂;)
只为lulz
保护你不受大量反对票的影响:)虽然很有趣,但我相信有人可能会使用它或说“哦!这个eval函数看起来非常强大,所以我还是要投反对票:)只为卢尔茨也是最短的答案。为什么这是对eval的错误使用?没有明显的安全问题=>upvote@DanielW。因为eval总是不受欢迎,因为具有基本经验的开发人员可能只是看到eval并开始在任何地方使用它——这当然是一种风险。这通常被认为是不好的做法。我可以建议ES7语法:
const getAvg=grades=>grades.reduce((p,c)=>p+c)/grades.length
如果你要使用
reduce
,那么你应该使用它的全部功能
array.reduce((all,one,u,src)=>all+=one/src.length,0)
我想指出JavaScript中的一个问题。如果将变量total定义为undefined,则会得到NaN<代码>总计数;让分数=[90,30,40,50,60];对于(设i=0;i
my
code
未格式化?不幸的是,这种方法会产生舍入错误。e、 g.
[1,1,1,1,1,1].map((c,i,arr)=>c/arr.length)。reduce((p,c)=>c+p)
将给出
0.99999999999999999
的值,而不是1。与Vlad的答案一样,这种方法会给出舍入误差。如果你试着平均
[1,1,1,1,1,1]
,你不会得到1。这很漂亮!超级简单和干净。谢谢大家!<代码>(数组)=>
部件不需要此部件为我工作所需的
(数组)=>
部件!
average([1,2,3,4]); // 2.5