lodash multi-colonne sortBy décroissant
Il y a une chouette méthode pour trier un tableau d'objets selon plusieurs propriétés:
var data = _.sortBy(array_of_objects, ['type', 'name']);
Mais seulement pour l'ascension de tri. Est-il une façon pratique de définir une direction par colonne? E. g.
var data = _.sortBy(array_of_objects, [{'type': 'asc'}, {'name': 'desc'}]);
Vous devez vous connecter pour publier un commentaire.
De lodash 3.5.0 vous pouvez utiliser sortByOrder (renommé orderBy en v4.3.0):
Depuis version 3.10.0 vous pouvez même utiliser la sémantique standard pour la commande (asc, desc):
Dans version 4 de lodash cette méthode a été renommé orderBy:
_.sortByOrder is not a function
dans la dernière version de lodash.sortByOrder
n'existe plus. Il est maintenant nomméorderBy
, ['asc', 'desc']
partie est ignoré pour moi avec [email protected]. Tout est trié dans l'ordre croissant._.sortBy
. Essayez_.orderBy
à la place. Espérons que cette aide.Vous pouvez toujours utiliser
Array.prototype.reverse()
Il est intéressant de noter que si vous souhaitez trier les propriétés particulières à la descente, vous ne voulez pas de simplement ajouter .reverse() à la fin, ce qui permettra d'effectuer toutes les sortes décroissant.
À faire de particulier sortes décroissant, la chaîne de votre sortes de la moins importante à la plus importante, en l'appelant .reverse() après chaque sorte que vous voulez être dans l'ordre décroissant.
Depuis _'s de tri est un tri stable, vous pouvez en toute sécurité de la chaîne et l'inverse sortes parce que si deux éléments ont la même valeur pour une propriété, leur ordre est conservé.
Plus d'informations
De profondeur de champ & multi champ & direction différente de la commande
Lodash >4
Pas. Vous ne pouvez pas spécifier l'ordre de tri autre que par une fonction de rappel qui inverse la valeur. Même pas, c'est possible pour un tri multicolonne.
Vous pourriez être en mesure de faire
Pour tout le reste, vous devrez recourir à la maternelle
.sort()
avec une fonction de comparaison personnalisée:Dans la documentation de la version 4.11.x, dit:"
"Cette méthode est comme _.sortBy sauf qu'il permet de spécifier l'ordre de tri de la iteratees de tri. Si les ordres n'est pas spécifié, toutes les valeurs sont triées dans l'ordre croissant. Sinon, spécifier un ordre de "desc" pour la descente ou "asc" pour ordre croissant des valeurs correspondantes."
(source https://lodash.com/docs/4.17.10#orderBy)
let sorted = _.orderBy(this.items, ['fieldFoo', 'fieldBar'], ['asc', 'desc'])
_.sortByOrder
?Vous pouvez aussi essayer ceci: