2012-05-04 15 views
1

データポイントのリストをグループ化して1日ごとに集計するにはどうすればよいですか?例えば、このリストを与える:D3.jsでの日付操作

2012-03-18T00:00:04 
2012-03-18T00:05:03 
2012-03-19T00:10:04 
2012-03-19T00:15:03 
2012-03-19T00:20:03 
2012-03-19T00:25:03 

私が持っていると思います:

2012-03-18,2 
2012-03-19,4 

答えて

1

js> points 
["2012-03-18T00:00:04", "2012-03-18T00:05:03", "2012-03-19T00:10:04", "2012-03-19T00:15:03", "2012-03-19T00:20:03", "2012-03-19T00:25:03"] 
js> points.forEach(function(x) { 
    var s = x.split("T")[0]; 
    if(map.hasOwnProperty(s)) { 
    map[s]++; 
    } 
    else { 
    map[s] = 1; 
    } 
}); 
js> map 
({'2012-03-18':2, '2012-03-19':4}) 
0

私はTは時間から日付を分けるという仮定をしなければなりませんでした。正規表現または部分文字列で日付を抽出し、集計に追加することができます。私は正規表現を使った。 points

var map = {}; 
points.forEach(function(x) { 
    var s = x.split("T")[0]; 
    if(map.hasOwnProperty(s)) { 
    map[s]++; 
    } 
    else { 
    map[s] = 1; 
    } 
}); 

と呼ばれる文字列の配列は、これはあなたにその日の各発生のカウントを与えるように、データ・ポイントを持っていると仮定すると

http://jsfiddle.net/p3ADG/

var count = {}; 

var input = [ 
"2012-03-18T00:00:04", 
"2012-03-18T00:05:03", 
"2012-03-19T00:10:04", 
"2012-03-19T00:15:03", 
"2012-03-19T00:20:03", 
"2012-03-19T00:25:03" 
]; 

for(var i = 0; i < input.length; i++) { 
    var date = /(.*)T/.exec(input[i])[1]; 
    if(!count[date]) { 
     count[date] = 1; 
    } 
    else { 
     count[date] += 1; 
    } 
} 

for (var date in count) { 
    document.write(date+","+count[date]+"<br>"); 
}