2014-12-05 3 views
1

자바 스크립트에 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}] 

덕분에 많은 여기

은 예입니다!

최대

+1

방법 제 배열입니까? 문자열이나 날짜 객체입니까? –

+0

텍스트에 설명 된대로 날짜 개체입니다. – Max

답변

3

기본 대답 : ES5

에서 이러한 lodash의 기능을 훨씬 쉽게 할 수

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

Array.forEach()

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

관련 문제