2017-09-29 2 views
0

Ich habe ein Array, das viele Objekte enthält. Ich versuche, das Array basierend auf dem Schlüsselwert jedes Objekts zu sortieren.So sortieren Sie Objekte aus Js-Array, nach Objekt Schlüssel/Wert

So sieht das Objekt wie folgt aus:

var info = [ 
    {name: 'Adam', age: '1987-01-09T18:23:20.000Z'}, 
    {name: 'Issac', age: '1988-09-02T11:17:11.000Z'}, 
    {name: 'Tom', age: '2003-08-07T13:07:03.000Z'}, 
    {name: 'Jane', age: '1997-17-01T14:57:41.000Z'} 
]; 

ich die neuen sorted genannt (sortiert) Daten in eine Variable gespeichert versuche;

var sorted = info.forEach(function(person) { 
    var age = moment(String(person.age)).format('MM/DD/YYYY'); 

    return age 

    }, this); 


console.log(sorted) 

Also, ich habe momentjs, das Datum in ein Zeitformat zu ändern, die leicht sortiert werden können, aber der sorted console.log zeigt mir undefined.

Ehrlich gesagt, ich weiß nicht einmal, wie Sortierfunktionen funktionieren. Zumindest sollte es die age von der Schleife zurück und somit console.log() sollte nicht leer gewesen

+0

forEach gibt undefined zurück, würde Karte sein, was gibt ein neues Array – MackoyokcaM

+0

Sie könnten Ihren eigenen Komparator für native 'sort' schreiben, oder verwenden Sie so etwas wie 'lodash':' _.sortBy (info, ['name', 'alter']); '- https://lodash.com/docs/4.17.4#sortBy – lux

Antwort

2

forEach wird nicht verwendet, zu sortieren, weder ist es verwendet, um ein Array zu ändern. Zum Sortieren sollten Sie sort verwenden.

Die Funktion sort sortiert ein Array, indem Elemente paarweise verglichen werden. Sie müssen ihm eine Funktion geben, die zwei Elemente "vergleicht". Die "Vergleich" -Funktion nimmt zwei Argumente a und b, und sollte eine negative Zahl zurückgeben, wenn a<b, 0, wenn sie gleich sind, und eine positive Zahl, wenn a>b.

Deshalb wird der Code unten könnte funktioniert:

var info = [ 
    {name: 'Adam', age: '1987-01-09T18:23:20.000Z'}, 
    {name: 'Issac', age: '1988-09-02T11:17:11.000Z'}, 
    {name: 'Tom', age: '2003-08-07T13:07:03.000Z'}, 
    {name: 'Jane', age: '1997-12-01T14:57:41.000Z'} 
]; 

info.sort(function (a, b) { 
    return (new Date(a.age)).getTime() - (new Date(b.age)).getTime() 
}) 

Beachten Sie auch, dass das vierte Datum, das Sie gegeben haben - 1997-17-01T14:57:41.000Z, ist ungültig, da Monat Zahl sein muss weniger als 13

+0

' 1997-17-01T14: 57: 41.000Z' ist im 'YYYY-DD-MM' Format gültig, was ziemlich untypisch und unerwartet ist ... – Xufox

+0

' ''> neues Datum ('1997-17-01T14: 57: 41.000Z') => Ungültiges Datum '' 'Sieht zumindest so aus, dass Chrome dies nicht unterstützt. – maowtm

+0

Ich weiß, dies ist ein "ungültiges Datum" in JavaScript. Das OP versucht jedoch, dies als ein JJJJ-TT-MM-Datum in moment.js zu analysieren. Es würde als solches gelten, aber es geht gegen den Standard, weil "YYYY-AA-BB" immer "YYYY-MM-DD" sein sollte, das in ISO 8601 standardisiert ist. – Xufox

0

für die Sie interessieren:

var arrayOfObject = [ 
    {name: 'Adam', age: '1987-01-09T18:23:20.000Z'}, 
    {name: 'Issac', age: '1988-09-02T11:17:11.000Z'}, 
    {name: 'Tom', age: '2003-08-07T13:07:03.000Z'}, 
    {name: 'Jane', age: '1997-12-01T14:57:41.000Z'} 
]; 

arrayOfObject.sort(function (a, b) { 
    return ((new Date(a.age)).getTime() - (new Date(b.age)).getTime()); 
}) 
+1

Warten Sie eine Minute ... Die Syntax, auch die Klammern sind die gleichen. Was für ein Zufall. – maowtm

+0

ja @man, sogar ich dachte auch gleich –

Verwandte Themen