我在项目中使用underscorejs。我需要做不同类型的数组操作,如map,reduce,filter groupby。
我的数据集如下所示:
var data_list = [
{"insertDate": "2011-12-02T00:00","value": {"paisa":10000}},
{"insertDate": "2013-03-02T00:00","value": {"paisa":10000}
},{"insertDate": "2013-03-02T00:00","value": {"paisa":10000}
},{"insertDate": "2012-12-02T00:00","value": {"paisa":30000}},
{"insertDate": "2013-04-02T00:00","value": {"paisa":10000},
},{"insertDate": "2013-04-02T00:00","value": {"paisa":30000}
},{"insertDate": "2013-03-02T00:00","value": {"paisa":20000}},
{"insertDate": "2013-04-12T00:00","value": {"paisa":30000}
},
{"insertDate": "2012-11-02T00:00","value": {"paisa":10000}}
]
我想根据日,月和年计算数据。 对于日计算,我正在进行groupby,然后使用map reduce进行计算。 如下所示:
var groupedByDateData = _.groupBy(data_list, "insertDate");
var aggregateByDate = _.map(groupedByDateData, function(invoiceObject, createdat) {
return {
createdat: createdat,
val: _.reduce(invoiceObject, function(m,x) {
return m + x.value.paisa;
}, 0)
};
});
它适用于基于日期的地图减少,但是对于月份和年份计算,我想以与代码可读相同的格式进行。
如何进行映射,减少使用下划线以便我可以获得如下数据: 每月计算:
[{"createdat": "February 2011", "val": 10000},
{"createdat": "March 2013", "val": 40000},
{"createdat": "December 2012", "val": 30000},
{"createdat": "April 2013", "val": 70000},
{"createdat": "November 2012", "val": 10000}]
对于年度mapreduce:
[{"createdat": "2011", "val": 10000},
{"createdat": "2013", "val": 110000},
{"createdat": "2012", "val": 70000}]
我的代码JSBIN此处
N.B:为了获得每年和每月减少的结果集,我正在分割日期,但这不是最好的事情。 在这里查看我的解决方案http://jsbin.com/etepan/3/edit
提前致谢。
答案 0 :(得分:8)
您希望按不同的方式(时间,月份,年份)进行分组,因此密钥位于groupBy
。
你正在使用它:
var groupedByDateData = _.groupBy(data_list, "insertDate");
这是简写:
var groupedByDateData = _.groupBy(data_list, function(item) {
return item.insertDate; // returns "YYYY-MM-DDT00:00"
});
通过修改此功能,您可以更改所获得的分组。例如,年:
var groupedByDateData = _.groupBy(data_list, function(item) {
// pretty crappy way of getting the year,
// but luckily the dates are structured
return item.insertDate.substring(0,4);
});
// => [
// {"createdat": "2011", "val": 10000},
// {"createdat": "2012", "val": 40000},
// {"createdat": "2013", "val": 110000}
// ]
月:
var groupedByDateData = _.groupBy(data_list, function(item) {
return item.insertDate.substring(0,7);
});
// => [
// {"createdat": "2011-12", "val": 10000},
// {"createdat": "2013-03", "val": 40000},
// {"createdat": "2012-12", "val": 30000},
// {"createdat": "2013-04", "val": 70000},
// {"createdat": "2012-11", "val": 10000}
// ]
你的JS Bin帮了很多忙:http://jsbin.com/ucohoq/7/edit