1267 Stimmen

Wie sortiert man ein Objekt-Array nach Datumseigenschaften?

Angenommen, ich habe ein Array mit einigen Objekten:

var array = [{id: 1, date: Mar 12 2012 10:00:00 AM}, {id: 2, date: Mar 8 2012 08:00:00 AM}];

Wie kann ich dieses Array nach dem Datumselement sortieren, beginnend mit dem Datum, das dem aktuellen Datum und der aktuellen Uhrzeit am nächsten liegt? Beachten Sie, dass das Array viele Objekte haben kann, aber der Einfachheit halber habe ich 2 verwendet.

Würde ich die Sortierfunktion und einen benutzerdefinierten Komparator verwenden?

14voto

Benjamin Merchin Punkte 513

Einfache einzeilige Lösung für mich, um Daten zu sortieren:

sort((a, b) => (a < b ? 1 : -1))

14voto

sunwarr10r Punkte 3907

Strings mit Datumsangaben sind in JavaScript vergleichbar (wenn sie syntaktisch gleich sind), z. B.:

'2020-12-01' < '2020-12-02' == true

Das heißt, Sie können diesen Ausdruck in einer benutzerdefinierten Sortierfunktion verwenden:

var arr = [{id:1, date:'2020-12-01'}, {id:1, date:'2020-12-15'}, {id:1, date:'2020-12-12'}]

function sortByDate(a, b) {
    if (a.date < b.date) {
        return 1;
    }
    if (a.date > b.date) {
        return -1;
    }
    return 0;
}

const sorted = arr.sort(sortByDate);
console.log(sorted);

9voto

James111 Punkte 13968

Ich füge dies hier hinzu, da einige Benutzer möglicherweise nicht wissen, wie sie diese Sortiermethode umkehren können.

Zum Sortieren nach "auftauchend" können wir einfach a und b vertauschen, etwa so:

your_array.sort ( (a, b) => {
      return new Date(a.DateTime) - new Date(b.DateTime);
});

Beachten Sie, dass a steht jetzt auf der linken Seite, und b ist auf der rechten Seite, :D!

9voto

Amay Kulkarni Punkte 794

Ich konnte die Sortierung mit den folgenden Zeilen erreichen:

array.sort(function(a, b)
{
   if (a.DueDate > b.DueDate) return 1;
   if (a.DueDate < b.DueDate) return -1;
})

8voto

Ich persönlich verwende folgende Methode zum Sortieren von Daten.

let array = ["July 11, 1960", "February 1, 1974", "July 11, 1615", "October 18, 1851", "November 12, 1995"];

array.sort(function(date1, date2) {
   date1 = new Date(date1);
   date2 = new Date(date2);
   if (date1 > date2) return 1;
   if (date1 < date2) return -1;
})

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X