2014-12-05 88 views
1

我在javascript中有一個Date()對象數組,我想計算每天的事件數。在javascript中計算具有特定日期的數組元素

下面是一個例子:

我所擁有的是:

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}] 

非常感謝!

最大

+1

如何是所述第一陣列?它是字符串還是日期對象? – 2014-12-05 11:14:08

+0

這是一個日期對象,如文中所述 – Max 2014-12-05 13:45:48

回答

3

基本答案:

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功能做得更容易,Array.forEach()在ES5

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 } 

DEMO