usa Lodash per ordinare l'array di oggetti in base al valore


97

Sto cercando di ordinare un array in base al valore "nome" (utilizzando Lodash). Ho usato i documenti di Lodash per creare la soluzione di seguito, tuttavia .orderBy non sembra avere alcun effetto. Qualcuno può far luce sul modo corretto di ordinare l'array?

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

Codice funzione

 var chars = this.state.characters;

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

 this.setState({characters: chars})

Risposte:


191

Questo metodo orderBynon cambia l'array di input, devi assegnare il risultato al tuo array:

var chars = this.state.characters;

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

 this.setState({characters: chars})

hmmm, ancora non sembra ordinare l'array. Non sono sicuro di dover aggiornare la domanda o

1
Aggiornata la risposta, forse il tuo errore è dovuto al passaggio di due parametri invece di un array per'name', 'asc'
Artémis Young

1
" orderBynon modifica l'array di input" ... " orderBycambia l'array in posizione." La formulazione prevista è probabilmente "non presente" o "fuori luogo". Vedi: en.wikipedia.org/wiki/In-place_algorithm
Dem Pilafian

In realtà hai ragione, ho appena rimosso questa frase poiché non aggiungeva nulla alla risposta
Artémis Young

Quel secondo parametro ['asc']non ordina ascendente, per ottenerlo il modo sarebbe aggiungere un reverse()dopo orderBy(almeno nella versione 4.17.15)
Diego Ortiz

60

Puoi utilizzare lodash sortBy ( https://lodash.com/docs/4.17.4#sortBy ).

Il tuo codice potrebbe essere come:

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)

32
Puoi anche usare la stenografia:_.sortBy(myArray, 'name')
Don

7
Rispetto a orderBy, non puoi passare il tipo di ordinamento sortBy, ordina sempre in ordine crescente.
a_rahmanshah
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.