0

我有一个加载在 javascript 数组中的订单列表,我想根据日期总结这些数据。我想显示每天的总订单和每天的总金额。

通常我会在.Net 或存储过程中执行此操作。对于如何使用 javascript 来解决这个问题,有点难过。谁能指出我正确的方向。我对 Javascript 有很好的掌握,但从来没有处理过 JS 中的数据操作。

4

2 回答 2

2

这是一项正在进行的工作:

var orders, groups;

orders = [
    ['order 1', 20, new Date(2012, 0, 1)],
    ['order 2', 20, new Date(2011, 0, 1)],
    ['order 3', 20, new Date(2010, 0, 1)],
    ['order 4', 20, new Date(2012, 0, 1, 10, 10, 10)]
];

groups = groupByDay(orders);
printSummary(groups);

// groups = {
//     1262300400000: [order 3]
//     1293836400000: [order 2]
//     1325372400000: [order 1, order 4]
// }

function groupByDay (orders) {
    var i, d, l, groups;
    groups = {};
    l = orders.length;
    for (i = 0; i < l; i++) {
        d = orders[i][2]; // date of current record
        d.setHours(0); // reset hours
        d.setMinutes(0); // reset minutes
        d.setSeconds(0); // reset seconds
        d = d.getTime(); // turn the date into a timestamp (year, month, day)
        if (!groups[d]) groups[d] = []; // use it as a group identifier
        groups[d].push(orders[i]); // populate the group
    }
    return groups;
}

function printSummary (groups) {
    var d, g, i, l, amount;
    for (d in groups) {
        g = groups[d];
        l = g.length;
        amount = 0;
        for (i = 0; i < l; i++) {
            amount += g[i][1];
        }
        document.write(
            (new Date(+d)).toDateString() + ': ' + amount + '<br />'
        );
    }    
}

于 2013-09-10T12:14:51.087 回答
2

如果你习惯了LINQ,可以看看linqjs。然后您可以使用类似于 .NET 的 LINQ 的函数(包括GroupBy来获取每日总数)。

否则,您正在考虑创建自己的结果集并自己聚合信息。

于 2013-09-10T12:01:31.387 回答