获取特定小时的记录以及相应数据的平均值
Get records for a particular hour and an average of corresponding data
我调用Web服务并获取数据。数据的格式为-
mail: "xyz@xyz.com"
price: "9.5"
name: "xyz"
receiveddate: "1374484561920"
我将以毫秒为单位的日期转换为日期,然后找到价格的小时。因此,每个EntryDate都有一个小时,即11、12、13等。
for(var l=0; l<data.length; l++){
var dataDate = recs[l].receiveddate;
dataDate = +dataDate;
var eachEntryDate = new Date(+dataDate.toString());
eachEntryDate = eachEntryDate.toString();
eachEntryDate = parseInt(eachEntryDate.substr(16, 2));
hourlyRecs[l] = {hour:eachEntryDate, price:recs[l].price};
}
现在我想得到每小时的平均价格。即小时为11、12等时的价格平均值。数据按随机顺序排列。最好的方法是什么?
您可以通过以下操作完成:
hourlyRecs.sort(function(a,b) { return a.hour - b.hour; } );
var results = [];
var value = {};
var sum = 0;
var count = 0;
var hour = hourlyRecs[0].hour;
for(var i = 0; i < hourlyRecs.length; i++) {
if (hourlyRecs[i].hour == hour) {
sum += hourlyRecs[i].price;
count++;
}
else {
value.avg = sum / count;
value.hour = hourlyRecs[i].hour;
results.push(value);
value = {};
sum = 0;
count = 0;
sum += hourlyRecs[i].price;
count++;
}
}
value.avg = sum / count;
value.hour = hourlyRecs[i].hour;
results.push(value);
您最终会得到一个hour/avgPrice数组。
希望它能帮助
创建一个array
,它将保存每小时的所有价格。
JavaScript
/* Fill an array by hour, containing all the prices for that hour */
var average = [];
for (var elem in hourlyRecs) {
average[hourlyRecs[elem].hour].push(hourlyRecs[elem].price);
}
/* get the average per each hour*/
for (var hour in average) {
var priceAverage = 0;
var count = 0;
for (var price in average[hour]) {
priceAverage += average[hour][price];
count+=1;
}
average[hour]["priceAverage"] = parseFloat(priceAverage/count,10);
}
第11小时的平均值:average[11]["priceAverage"]
。
好的。由于一切都必须在JS中完成,所以让我们先组织数据。
创建两个包含24个元素的数组-一个用于每小时成本,一个用于计数。(或仅一个包含2个值)
当您循环浏览数据时,每次都会增加相关成本,而则会增加计数。
类似这样的东西:
var counts = [];
var costs = [];
for(var i = 0; i < recs.length; i++) {
// This is your current code
var dataDate = recs[l].receiveddate;
dataDate = +dataDate;
var hour = new Date(+dataDate.toString());
hour = hour .toString();
hour = parseInt(hour .substr(16, 2));
// Extend it with this
counts[hour]++;
costs[hour] += recs[l].price;
}
然后把费用除以计数,你就走了。这样,您就不必担心对数据进行排序或诸如此类的事情。
此外,如果您只是将毫秒数除以3600000(1小时内的磨机数)并从中取出int,则您的小时拾取功能可以简化。
hour = parseInt(milliseconds / 3600000);
相关文章:
- 用程序搜索JQuery数据表中的文本
- 要求输入在数据列表中
- 正在将数据主题添加到所有项目
- 函数参数中的数据与指定变量之间的任何性能差异
- 在VanillaJS中模拟模型双向数据绑定
- CSS-如何定位内容数据标题
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 序列化数据属性中对象的最可靠方法
- 如何将JSON数据导入我的ejs模板
- 平均值:无法将数据更新到数据库
- 平均值.on(事件[,选择器][,数据],处理程序)
- 计算数据点阵列与平均值的最大距离,并返回相关数据点
- 问题是最后一列的平均值总和-从JSON解析的数据-Angular JS
- 获取特定小时的记录以及相应数据的平均值
- 计算平均值并转换数据表javascript
- 如何在javascript或下划线中计算json数据的平均值
- 带孔数据的Dygraph滚动平均值
- 求数组数据的平均值
- 计算数据组的平均值