获取特定小时的记录以及相应数据的平均值

Get records for a particular hour and an average of corresponding data

本文关键字:数据 平均值 记录 小时 获取      更新时间:2023-09-26

我调用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);