如何计算javascript或下划线中json数据的平均值?

如何计算javascript或下划线中json数据的平均值?,javascript,jquery,underscore.js,Javascript,Jquery,Underscore.js,我知道subline.js在集合函数中有max()和min()函数,但为什么它没有avg()函数呢 我想计算这三个学生的数学平均值,必须排除小于0的平均值。我可以使用for或foreach,但是如何使用下划线函数或其他js函数,比如map或grep json数据如下所示: { "Data": [ { "StudentName": "SA", "Math": {"AvgValue": 80, "MaxValue": 99, "MinValue": 60 }, "English"

我知道subline.js在集合函数中有
max()
min()
函数,但为什么它没有
avg()
函数呢

我想计算这三个学生的数学平均值,必须排除小于0的平均值。我可以使用for或foreach,但是如何使用下划线函数或其他js函数,比如map或grep

json数据如下所示:

{ "Data": [
  { "StudentName": "SA",
    "Math": {"AvgValue": 80, "MaxValue": 99, "MinValue": 60 },
    "English": {"AvgValue": 76, "MaxValue": 80, "MinValue": 55 } },
  { "StudentName": "SB",
    "Math": {"AvgValue": 75, "MaxValue": 88, "MinValue": 34 },
    "English": {"AvgValue":98, "MaxValue": 100, "MinValue": 90 } },
  { "StudentName": "SC",
    "Math": {"AvgValue": -1, "MaxValue": -1, "MinValue": -1 },
    "English": {"AvgValue":-1, "MaxValue": -1, "MinValue": -1 } }
], "Total": 3, "AggregateResults": null, "Errors": null }

你可以用这样的等级得到你想要的数组

var grades = data.Data
        .map( function (s) { return s.Math.AvgValue })
        .filter (function (n) {return n > 0}) 
   //   -> [ 80, 75 ]
然后使用下划线或简单的for循环来计算平均值

为什么它没有
avg()
功能

Javascript库作者必须权衡一个特性的效用和它对库的大小所带来的成本,特别是当库具有非常通用的用途时

下划线的目标是:

这就是问题的答案:“如果我坐在一个空白的HTML页面前,想要立即开始工作,我需要什么?”

我认为“平均值”可能太容易写了,也太少需要符合这种描述

function mathAverage() {
    function mathScores() { 
        return data['Data'].map(function (student) {
            return student['Math']['AvgValue']; 
        });
    }
    function add(x, y) { return x + y; }
    function sum(xs) { return _.reduce(xs, add); }
    function average(xs) { return sum(xs) / xs.length;}
    function nonnegative(x) { return x >= 0; }
    return average(mathScores().filter(nonnegative));
}