Verwenden Sie Lodash, um das Array eines Objekts nach Wert zu sortieren

93

Ich versuche, ein Array nach dem Wert 'name' zu sortieren (mit Lodash). Ich habe die folgenden Lodash-Dokumente verwendet, um die unten stehende Lösung zu erstellen. OrderBy scheint jedoch keinerlei Auswirkungen zu haben. Kann jemand etwas Licht in die richtige Art und Weise bringen, Arrays zu sortieren?

Zeichen-Array

[  
   {  
      "id":25,
      "name":"Anakin Skywalker",
      "createdAt":"2017-04-12T12:48:55.000Z",
      "updatedAt":"2017-04-12T12:48:55.000Z"
   },
   {  
      "id":1,
      "name":"Luke Skywalker",
      "createdAt":"2017-04-12T11:25:03.000Z",
      "updatedAt":"2017-04-12T11:25:03.000Z"
   }
]

Funktionscode

 var chars = this.state.characters;

 _.orderBy(chars, 'name', 'asc'); // Use Lodash to sort array by 'name'

 this.setState({characters: chars})
Ariel
quelle

Antworten:

187

Diese Methode orderByändert das Eingabearray nicht. Sie müssen das Ergebnis Ihrem Array zuweisen:

var chars = this.state.characters;

chars = _.orderBy(chars, ['name'],['asc']); // Use Lodash to sort array by 'name'

 this.setState({characters: chars})
Artémis Young
quelle
hmmm, scheint das Array immer noch nicht zu sortieren. Ich bin mir nicht sicher, ob ich die Frage aktualisieren oder eine neue
1
Die Antwort wurde aktualisiert. Möglicherweise liegt Ihr Fehler daran, dass zwei Parameter anstelle eines Arrays für'name', 'asc'
Artémis Young am
1
" orderByÄndert das Eingabearray nicht" ... " orderByÄndert das Array an Ort und Stelle." Der beabsichtigte Wortlaut ist wahrscheinlich "nicht an Ort und Stelle" oder "nicht an Ort und Stelle". Siehe: en.wikipedia.org/wiki/In-place_algorithm
Dem Pilafian
Eigentlich hast du recht, ich habe diesen Satz gerade entfernt, da er der Antwort nichts hinzufügte
Artémis Young
Dieser zweite Parameter ['asc']ordnet nicht aufsteigend an, um dies zu erreichen, wäre der Weg, ein reverse()nach dem orderBy(zumindest in Version 4.17.15)
Diego Ortiz
56

Sie können lodash sortBy ( https://lodash.com/docs/4.17.4#sortBy ) verwenden.

Ihr Code könnte wie folgt aussehen:

const myArray = [  
   {  
      "id":25,
      "name":"Anakin Skywalker",
      "createdAt":"2017-04-12T12:48:55.000Z",
      "updatedAt":"2017-04-12T12:48:55.000Z"
   },
   {  
      "id":1,
      "name":"Luke Skywalker",
      "createdAt":"2017-04-12T11:25:03.000Z",
      "updatedAt":"2017-04-12T11:25:03.000Z"
   }
]

const myOrderedArray = _.sortBy(myArray, o => o.name)
Caio Santos
quelle
31
Sie können auch die Kurzschrift verwenden:_.sortBy(myArray, 'name')
Don
5
Im Vergleich dazu orderBykönnen Sie den Sortiertyp nicht übergeben sortBy, er sortiert immer in aufsteigender Reihenfolge.
a_rahmanshah