2012-05-04 2 views
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

Предполагая, что вы есть точки данных как массив строк называется points

var map = {}; 
points.forEach(function(x) { 
    var s = x.split("T")[0]; 
    if(map.hasOwnProperty(s)) { 
    map[s]++; 
    } 
    else { 
    map[s] = 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 отделяющий дату от времени. Вы можете вывести дату с помощью регулярного выражения или подстроки и добавить к тату. Я использовал регулярное выражение.

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>"); 
} 
Смежные вопросы