145 votes

utiliser Lodash pour trier un tableau d'objets par valeur

J'essaie de trier un tableau par la valeur "nom" (en utilisant Lodash). J'ai utilisé la documentation de Lodash pour créer la solution ci-dessous, mais .orderBy ne semble pas avoir d'effet du tout. Quelqu'un peut-il m'éclairer sur la manière correcte de trier un tableau ?

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

266voto

Artémis Young Points 1215

Cette méthode orderBy ne modifie pas le tableau d'entrée, vous devez assigner 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})

1 votes

Hmmm, ça 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 votes

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

1 votes

" orderBy ne modifie pas le tableau d'entrée" ... " orderBy change le tableau en place." La formulation voulue est probablement "not-in-place" ou "out-of-place". Voir : fr.wikipedia.org/wiki/algorithme en place

79voto

Caio Santos Points 404

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

Votre code pourrait être le suivant :

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)

42 votes

Vous pouvez également utiliser le raccourci : _.sortBy(myArray, 'name')

12 votes

Par rapport à orderBy vous ne pouvez pas passer le type de tri dans sortBy le tri se fait toujours par ordre croissant.

10voto

Damjan Pavlica Points 7299

Si vous avez besoin de trier par date, vous pouvez utiliser cette solution :

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

Si vous utilisez moment bibliothèque, alors :

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

P.s. Notez que le lodash ne trie pas les dates au format chaîne, vous devez donc le convertir en objet Date.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X