2014-09-26 21 views
9

Nota prawna: Nie mam pojęcia, co robię. Poważnie, uwielbiam wizualizację danych i myślałem, że zrobienie tego samemu byłoby świetnym sposobem nauki programowania i korzystania z baz danych oraz tworzenia aplikacji internetowych, takich jak fajny facet. Szukałem odpowiedzi na ostatni dzień, a wszystkie przykłady, które mogłem znaleźć, nie mogły działać z moim kodem.Sortowanie według daty za pomocą d3.js

Oto pojemnik z wklejaniem pełnego kodu i danych, których używam. Jest to wykres liniowy próbka znajduje się na github d3.js z moich danych wypełniane http://pastebin.com/7aW6wegd

JSON pochodzi z bazy couchdb

mogę narysować linie, ale są one bałagan.:

enter image description here

myślę, że to jest spowodowane terminach nie sortujących prawidłowo, ponieważ w konsoli są one wymienione w porządku. Nie mogę wymyślić, jak poprawnie sortować datę. Użycie d3.time.format zgłasza błędy (możesz zobaczyć je w kodzie pobranym z przykładowego wykresu liniowego, wykorzystując go do analizy dat.) Używanie go z moimi danymi powoduje błąd, nawet po próbie skrętu sygnatury czasowe do dat) i nie mogę wymyślić, jak uzyskać daty do sortowania w couchdb.

+3

Wygląda całkiem nieźle, gdy po raz pierwszy uczciwie. Po prostu posortuj daty przed zdefiniowaniem obiektu daty. https://github.com/mbostock/d3/wiki/Arrays –

Odpowiedz

11

Dlaczego po prostu nie posortujesz swoich danych po forEach, w których wypełniasz właściwości date? Oto bardzo prosty realizacja sortowania tablicy obiektów:

var data = [ 
     {date: new Date(2000)}, 
     {date: new Date(1000)} 
    ]; 

function sortByDateAscending(a, b) { 
    // Dates will be cast to numbers automagically: 
    return a.date - b.date; 
} 

data = data.sort(sortByDateAscending); 

Jest ładny documentation dla Array.prototype.sort.

+2

Dziękuję. To działało idealnie. Próbowałem zapisać/wypożyczyć kilka funkcji sortowania, których wszystkie zawiodły. To raz jest 2 lub 3 linie krótsze niż najprostsze, które znalazłem. – Trel

+0

Nie wiem, dlaczego to zwraca mm/dd/rrrr, gdy międzynarodowy standard to rrrr/dd/mm –

+0

@Claudiu Z jakiegoś powodu OP postanowił sformatować daty za pomocą 'd3.time.format ("% x ") '(patrz wiersz 46 o pastebin). Według dokumentów formatuje daty jako "% m /% d /% Y", patrz https://github.com/mbostock/d3/wiki/Time-Formatting#format Jeśli chcesz, możesz wybrać inny format. – Oleg

Powiązane problemy