Powiedzmy, że mam tablicę kilku obiektów:
var array = [{id: 1, date: Mar 12 2012 10:00:00 AM}, {id: 2, date: Mar 8 2012 08:00:00 AM}];
Jak mogę posortować tę tablicę według elementu daty w kolejności od daty najbliższej do bieżącej daty i czasu? Pamiętaj, że tablica może zawierać wiele obiektów, ale dla uproszczenia użyłem 2.
Czy użyłbym funkcji sortowania i niestandardowego komparatora?
AKTUALIZACJA:
W moim konkretnym przypadku chciałem, aby daty były ustawione od najnowszego do najstarszego. Okazało się, że musiałem odwrócić logikę prostej funkcji tak:
array.sort(function(a, b) {
a = new Date(a.dateModified);
b = new Date(b.dateModified);
return a>b ? -1 : a<b ? 1 : 0;
});
Sortuje daty od najnowszych.
javascript
datetime
ryandlf
źródło
źródło
Odpowiedzi:
Najprostsza odpowiedź
Bardziej ogólna odpowiedź
Lub bardziej zwięźle:
Ogólna, mocna odpowiedź
Zdefiniuj niestandardową
sortBy
funkcję niepoliczalną, używając transformacji Schwartziana we wszystkich tablicach:Używaj go w ten sposób:
Jeśli twoja data nie jest bezpośrednio porównywalna, stwórz z niej porównywalną datę, np
Możesz także użyć tego do sortowania według wielu kryteriów, jeśli zwrócisz tablicę wartości:
Więcej informacji na stronie http://phrogz.net/JS/Array.prototype.sortBy.js .
źródło
return b-a;
w prostej odpowiedzi?Odpowiedzi @Phrogz są świetne, ale oto świetna, bardziej zwięzła odpowiedź:
Korzystanie z funkcji strzałki
znaleziono tutaj: Sortuj datę w JavaScript
źródło
a - b
Równie dobrze działałoby matematyka . Tak więc,array.sort((a, b) => a - b)
(es6)Po poprawieniu JSON powinno to działać teraz:
źródło
Twoje dane wymagają pewnych poprawek:
Po poprawieniu danych możesz użyć tego fragmentu kodu:
źródło
0
razie potrzeby!Polecam GitHub: Array sortBy - najlepsza implementacja
sortBy
metody wykorzystującej transformację SchwartzianaAle na razie wypróbujemy to podejście Gist: sortBy-old.js .
Stwórzmy metodę sortowania tablic, które mogą układać obiekty według niektórych właściwości.
Tworzenie funkcji sortowania
Ustawianie nieposortowanych danych
Użyj tego
Na koniec układamy tablicę według
"date"
właściwości jakostring
Jeśli chcesz zignorować wielkość liter, ustaw
"parser"
oddzwonienie:Jeśli chcesz traktować pole „data” jako
Date
typ:Tutaj możesz grać z powyższym przykładem:
jsbin.com/lesebi
źródło
Powinno to zrobić, gdy data jest w tym formacie (dd / mm / rrrr).
Wtedy zadzwoń
sortByDate(myArr);
źródło
Możesz użyć sortBy w podkreśleniu js.
http://underscorejs.org/#sortBy
Próba:
źródło
Dodam to tutaj, ponieważ niektóre zastosowania mogą nie być w stanie ustalić, jak odwrócić tę metodę sortowania.
Aby posortować według „nadchodzących”, możemy po prostu zamienić a & b, tak:
Zauważ, że
a
teraz jest po lewej stronie, ab
po prawej: D!źródło
Osobiście stosuję następujące podejście do sortowania dat.
źródło
udało mi się uzyskać sortowanie za pomocą poniższych linii:
źródło
źródło
Dla każdego, kto chce sortować według daty (format brytyjski), zastosowałem:
źródło
Właśnie wziąłem transformację Schwartziana przedstawioną powyżej i wykonałem jako funkcję. Przyjmuje
array
, sortowaniefunction
i wartość logiczną jako dane wejściowe:źródło
Dziękuję Ganesh Sanap. sortowanie elementów według pola daty od starego do nowego. Użyj tego
źródło
Jeśli podobnie jak ja masz tablicę z datami sformatowanymi w taki sposób, w
YYYY[-MM[-DD]]
którym chcesz zamówić bardziej szczegółowe daty przed mniej określonymi, wymyśliłem tę przydatną funkcję:źródło
źródło