如何计算javascript或下划线中json数据的平均值?
我知道subline.js在集合函数中有如何计算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"
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));
}