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?

2173voto

Phrogz Punkte 283167

Einfachste Antwort

array.sort(function(a,b){
  // Turn your strings into dates, and then subtract them
  // to get a value that is either negative, positive, or zero.
  return new Date(b.date) - new Date(a.date);
});

Allgemeinere Antwort

array.sort(function(o1,o2){
  if (sort_o1_before_o2)    return -1;
  else if(sort_o1_after_o2) return  1;
  else                      return  0;
});

Oder noch kürzer:

array.sort(function(o1,o2){
  return sort_o1_before_o2 ? -1 : sort_o1_after_o2 ? 1 : 0;
});

Allgemeine, aussagekräftige Antwort

Definieren Sie eine benutzerdefinierte nicht aufzählbare sortBy Funktion unter Verwendung einer Schwartzsche Transformation auf alle Arrays:

(function(){
  if (typeof Object.defineProperty === 'function'){
    try{Object.defineProperty(Array.prototype,'sortBy',{value:sb}); }catch(e){}
  }
  if (!Array.prototype.sortBy) Array.prototype.sortBy = sb;

  function sb(f){
    for (var i=this.length;i;){
      var o = this[--i];
      this[i] = [].concat(f.call(o,o,i),o);
    }
    this.sort(function(a,b){
      for (var i=0,len=a.length;i<len;++i){
        if (a[i]!=b[i]) return a[i]<b[i]?-1:1;
      }
      return 0;
    });
    for (var i=this.length;i;){
      this[--i]=this[i][this[i].length-1];
    }
    return this;
  }
})();

Verwenden Sie es so:

array.sortBy(function(o){ return o.date });

Wenn Ihr Datum nicht direkt vergleichbar ist, machen Sie ein vergleichbares Datum daraus, z. B.

array.sortBy(function(o){ return new Date( o.date ) });

Sie können dies auch verwenden, um nach mehreren Kriterien zu sortieren, wenn Sie ein Array von Werten zurückgeben:

// Sort by date, then score (reversed), then name
array.sortBy(function(o){ return [ o.date, -o.score, o.name ] };

Voir http://phrogz.net/JS/Array.prototype.sortBy.js für weitere Einzelheiten.

366voto

Gal Punkte 4649

Die Antworten von @Phrogz sind beide großartig, aber hier ist eine großartige, präzisere Antwort:

array.sort(function(a,b){return a.getTime() - b.getTime()});

Mit der Pfeilfunktion Weg

array.sort((a,b)=>a.getTime()-b.getTime());

finden Sie hier: Datum sortieren in Javascript

127voto

qw3n Punkte 5966

Nach der Korrektur des JSON sollte dies nun für Sie funktionieren:

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

array.sort(function(a, b) {
    var c = new Date(a.date);
    var d = new Date(b.date);
    return c-d;
});

81voto

Saran Punkte 1217

Oben Antworten sind alle gut, hier ist meine Implementierung der Sortierung Datum in ES6 Weg, ich bin mit Date.parse (ist ein globales Date-Objekt) wird die String-Darstellung von Date in die Anzahl der Millisekunden umgewandelt. Anstelle der Instanziierung von new Date Objekt jedes Mal.

var array = ["2021-08-10T07:24:30.087+0000" , "2021-09-30T07:24:30.087+0000", "2021-10-13T07:24:30.087+0000"];

// sorting with latest date
array.sort((a,b) => Date.parse(b) - Date.parse(a))

65voto

gabitzish Punkte 9431

Ihre Daten bedürfen einiger Korrekturen:

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

Nachdem Sie die Daten korrigiert haben, können Sie dieses Codestück verwenden:

function sortFunction(a,b){  
    var dateA = new Date(a.date).getTime();
    var dateB = new Date(b.date).getTime();
    return dateA > dateB ? 1 : -1;  
}; 

var array = [{id: 1, date: "Mar 12 2012 10:00:00 AM"},{id: 2, date: "Mar 28 2012 08:00:00 AM"}];
array.sort(sortFunction);

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