我打电话给网络服务并获取数据。数据格式为 -
mail: "xyz@xyz.com"
price: "9.5"
name: "xyz"
receiveddate: "1374484561920"
我将以毫秒为单位的日期转换为日期,并找到价格为什么的小时。所以eachEntryDate有小时,即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等的价格的平均值。数据是随机顺序。这样做的最佳方式是什么?
答案 0 :(得分:0)
你可以用这个完成:
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);
你最终得到一个小时/平均值的数组。
希望有所帮助
答案 1 :(得分:0)
好的。因为一切都必须在JS中完成,所以我们先组织数据。
创建 2个包含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中的工厂数量小时,把它拿出来。
hour = parseInt(milliseconds / 3600000);
答案 2 :(得分:0)
创建一个array
,其中包含所有每小时的价格。
/* 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"]
。