utiliser Lodash pour trier un tableau d'objets par valeur


97

J'essaye de trier un tableau par valeur de «nom» (en utilisant Lodash). J'ai utilisé les documents Lodash pour créer la solution ci-dessous, cependant .orderBy ne semble pas avoir d'effet du tout. Quelqu'un peut-il nous éclairer sur la manière correcte de trier le tableau?

Tableau de caractères

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

Code de fonction

 var chars = this.state.characters;

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

 this.setState({characters: chars})

Réponses:


190

Cette méthode orderByne modifie pas le tableau d'entrée, vous devez affecter le résultat à votre tableau:

var chars = this.state.characters;

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

 this.setState({characters: chars})

hmmm, ne semble toujours pas trier le tableau. Je ne sais pas si je dois mettre à jour la question ou en créer une nouvelle

1
Mise à jour de la réponse, peut-être que votre erreur est due au passage de deux paramètres au lieu d'un tableau pour'name', 'asc'
Artémis Young

1
" orderByne modifie pas le tableau d'entrée" ... " orderBymodifie le tableau en place." Le libellé prévu est probablement «pas en place» ou «hors de place». Voir: en.wikipedia.org/wiki/In-place_algorithm
Dem Pilafian

En fait, vous avez raison, je viens de supprimer cette phrase car elle n'ajoute rien à la réponse
Artémis Young

Ce deuxième paramètre ['asc']n'est pas d'ordre croissant, pour y parvenir, il faudrait ajouter un reverse()après le orderBy(au moins dans la version 4.17.15)
Diego Ortiz

60

Vous pouvez utiliser lodash sortBy ( https://lodash.com/docs/4.17.4#sortBy ).

Votre code pourrait être comme:

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
Vous pouvez également utiliser la sténographie:_.sortBy(myArray, 'name')
Don

7
Par rapport à orderBy, vous ne pouvez pas passer le type de tri sortBy, il trie toujours par ordre croissant.
a_rahmanshah
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.