javascript - bruk Lodash for å sortere en array av objekter etter verdi


Jeg prøver å sortere et array etter 'name'-verdien (ved bruk av Lodash). Jeg brukte Lodash-dokumentasjonen for å lage løsningen nedenfor, men .orderBy ser ikke ut til å ha noen effekt i det hele tatt. Kan noen kaste lys over den riktige måten å sortere et array på?

Chars-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"
   }
]

Funksjonskode

 var chars = this.state.characters;

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

 this.setState({characters: chars})

Svar #1

Denne metoden orderBy endrer ikke inngangsarrayet, du må tilordne resultatet til arrayet ditt :

var chars = this.state.characters;

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

 this.setState({characters: chars})

Svar #2

Du kan bruke lodash sortBy (https://lodash.com/docs/4.17.4#sortBy).

Koden din kan være slik:

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)

Svar #3

Hvis du trenger å sortere etter dato, kan du bruke denne løsningen:

orderBy(items, (a) => new Date(a.createdAt), ['asc']) // or 'desc'

Hvis du bruker moment-biblioteket, så:

orderBy(items, (a) => moment(a.createdAt), 'asc')

P.s. Merk at lodash ikke sorterer datoer i strengformat, så du må konvertere det til et Date-objekt.

Relaterte artikler