我需要使用Meteor.js在集合中使用多个值来计算平均值。
特别是,我需要计算两件事:
使用javascript我会写这样的东西:
var arr = [{
'km': 12000,
'liters': 20
}, {
'km': 12140,
'liters': 50
}, {
'km': 12240,
'liters': 45
}];
function calculate_avg() {
var sum_liters = 0,
arrlength = arr.length;
for(i = 0; i < arrlength; i++) {
sum_liters += arr[i].liters;
}
return ((arr[arrlength-1].km - arr[0].km)/sum_liters);
};
在meteor中我定义了一个名为“Refills”的集合:
Refills = new Meteor.collection('refills');
// and I insert some example data like in the javascript array
Refills.insert({
'km': 12000,
'liters': 20
});
Refills.insert({
'km': 12500,
'liters': 15
});
Refills.insert({
'km': 13000,
'liters': 35
});
//etc.
最好的方法是什么?
我试着这样做:
Template.refills.helpers({
avg: function(){
var sum_liters = 0,
diff_km = 0;
Refills.find().map(function (doc, index, cursor) {
//?? var diff_km = doc[last].km - doc[0].km
var sum_liters += doc.liters;
return ((/*diff_km*/)/sum_liters);
});
}
});
提前感谢任何有帮助的人。
答案 0 :(得分:1)
尝试一下:
Template.refills.helpers({
avg: function() {
// sort refills by km so the math in the last step makes sense
var refills = Refills.find({}, {sort: {km: 1}}).fetch();
// use a simple reduce to compute the sum
var totalLiters = _.reduce(refills, (function(s, r) {return s + r.liters;}), 0);
// return the average (total distance) / (total liters)
return (_.last(refills).km - _.first(refills).km) / totalLiters;
}
});
您需要在光标上使用fetch,以便操作数组。