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})

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})

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)

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.