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

时间:2013-07-31 11:53:37

标签: javascript

我打电话给网络服务并获取数据。数据格式为 -

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等的价格的平均值。数据是随机顺序。这样做的最佳方式是什么?

3 个答案:

答案 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,其中包含所有每小时的价格

的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"]