web-dev-qa-db-de.com

So sortieren Sie ein Javascript-Array von Objekten nach Datum

Ich versuche, ein Array von Objekten mit jedem Objekt zu sortieren 

var recent = [{id: "123",age :12,start: "10/17/13 13:07"} , {id: "13",age :62,start: "07/30/13 16:30"}];

Datumsformat ist: mm/dd/yy hh:mm

Ich möchte nach dem neuesten Datum sortieren. Wenn Datum gleich ist, sollte es rechtzeitig sortiert werden.

Ich habe die unten stehende Sortierfunktion ausprobiert. Aber es funktioniert nicht.

recent.sort(function(a,b))
{
    a = new Date(a.start);
    b = new Date(b.start);
    return a-b;
});

Wie soll ich auch die Objekte zum Sortieren durchlaufen? So etwas wie:

for (var i = 0; i < recent.length; i++)
    {
        recent[i].start.sort(function (a, b)
        {
            a = new Date(a.start);
            b = new Date(b.start);
            return a-b; 
        } );
    }

Das Array kann eine beliebige Anzahl von Objekten enthalten.

37
Anthea

Wie in den Kommentaren darauf hingewiesen wurde, ist die Definition von "Recent" kein korrektes Javascript.

Angenommen, die Datumsangaben sind Strings:

var recent = [
    {id: 123,age :12,start: "10/17/13 13:07"}, 
    {id: 13,age :62,start: "07/30/13 16:30"}
];

dann wie folgt sortieren:

recent.sort(function(a,b) { 
    return new Date(a.start).getTime() - new Date(b.start).getTime() 
});

Weitere Details zur Sortierfunktion von W3Schools

54
Chris Charles
recent.sort(function(a,b) { return new Date(a.start).getTime() - new Date(b.start).getTime() } );
5
Tom Bowers

Mit dieser Funktion können Sie einen Komparator erstellen, der einen Pfad zu der zu suchenden Taste führt:

function createDateComparator ( path = [] , comparator = (a, b) => a.getTime() - b.getTime()) {
  return (a, b) => {
    let _a = a
    let _b = b
    for(let key of path) {
      _a = _a[key]
      _b = _b[key]
    }
    return comparator(_a, _b)
  }
}


const input = (
  [ { foo: new Date(2017, 0, 1) }
  , { foo: new Date(2018, 0, 1) }
  , { foo: new Date(2016, 0, 1) }
  ]
)

const result = input.sort(createDateComparator([ 'foo' ]))

console.info(result)

0
cchamberlain

ES6:

recent.sort((a,b)=> new Date(b.start).getTime()-new Date(a.start).getTime());
0
stayingcool