我在javascript中有一个Date()对象数组,我想计算每一天的事件数。
以下是一个例子:
我拥有的是:
Array [ Date 2014-12-04T10:30:20.000Z, Date 2014-12-05T11:04:58.056Z, Date 2014-12-05T11:04:58.056Z, Date 2014-12-05T11:04:58.056Z ]
我想要的是:
Array [{date: '2014-12-04', counts: 1}, {date: '2014-12-05', counts: 3}]
非常感谢!
最高
答案 0 :(得分:4)
基本答案:
var arr = [], // fill it with array with your data
results = {}, rarr = [], i, date;
for (i=0; i<arr.length; i++) {
// get the date
date = [arr[i].getFullYear(),arr[i].getMonth(),arr[i].getDate()].join("-");
results[date] = results[date] || 0;
results[date]++;
}
// you can always convert it into an array of objects, if you must
for (i in results) {
if (results.hasOwnProperty(i)) {
rarr.push({date:i,counts:results[i]});
}
}
使用lodash函数和ES5中的Array.forEach()
答案 1 :(得分:0)
最好还有一个简单的对象,其中键作为日期,值作为计数。我添加了一个简单的填充函数,它的前缀为零,根据您的输出要求,数字是一位数。
function pad(n) {
return n.toString().length == 1 ? '0' + n : n;
}
function getCount(arr) {
var obj = {};
for (var i = 0, l = arr.length; i < l; i++) {
var thisDate = arr[i];
var day = pad(thisDate.getDate());
var month = pad(thisDate.getMonth() + 1);
var year = thisDate.getFullYear();
var key = [year, day, month].join('-');
obj[key] = obj[key] || 0;
obj[key]++;
}
return obj;
}
getCount(arr); // Object { 2014-04-12: 1, 2014-05-12: 3 }