4

我调用网络服务并获取数据。数据格式为 -

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 等的平均价格。数据按随机顺序排列。做这个的最好方式是什么?

4

3 回答 3

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);    

你最终会得到一个小时/平均价格数组。

希望能帮助到你

于 2013-07-31T12:24:33.930 回答
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"].

于 2013-07-31T12:45:40.973 回答
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 小时内的磨机数并从中取出 int,则可以简化您的小时选择功能。

hour = parseInt(milliseconds / 3600000);
于 2013-07-31T12:36:44.860 回答