J'utilise actuellement des underscorejs pour trier mon tri json. Maintenant, j'ai demandé à faire un tri ascending
et à l' descending
aide de underscore.js. Je ne vois rien de semblable dans la documentation. Comment puis-je atteindre cet objectif?
javascript
underscore.js
Rahul
la source
la source
sortBy
fonction peut l'être,return -n
mais cela ne fonctionnera pas pour les chaînes; d'où la question de savoir quels types de choses vous triez._.sortBy([1,4,3,2]).reverse()
ou_.chain([1,4,3,2]).sortBy().reverse().value()
si vous ne voulez pas utiliser lereverse()
prototype d'Array.Réponses:
Vous pouvez utiliser
.sortBy
, il renverra toujours une liste ascendante :Mais vous pouvez utiliser la méthode .reverse pour le faire descendre :
Ou lorsque vous traitez avec des nombres, ajoutez un signe négatif au retour pour descendre la liste:
Sous le capot
.sortBy
utilise le intégré.sort([handler])
:la source
.sortBy()
appels intégrésArray.sort()
, dont l'algorithme appartient aux fournisseurs de navigateurs, mais il est peu probable que le tri par bulles soit leur choix._.sortBy(arr, function)
, je suppose qu'il boucle sur chaque élément et exécute une logique pour renvoyer le tableau trié. Ensuite, lorsque vous l'appelez,Array.prototype.reverse()
il boucle probablement à nouveau chaque élément et exécute une logique pour retourner le tableau inversé. Par conséquent, vous bouclez le tableau deux fois.L'ordre décroissant utilisant le trait de soulignement peut être effectué en multipliant la valeur de retour par -1.
Si vous triez par chaînes et non par nombres, vous pouvez utiliser la méthode charCodeAt () pour obtenir la valeur unicode.
la source
La méthode inverse du prototype Array modifie le tableau et lui renvoie une référence, ce qui signifie que vous pouvez le faire:
En outre, la documentation de soulignement se lit comme suit:
ce qui signifie que vous pouvez également utiliser
.reverse()
lors du chaînage:la source
_.sortBy(collection, item => item. propertyName.toLowerCase());
Semblable à la bibliothèque Underscore, il existe une autre bibliothèque appelée «lodash» qui a une méthode «orderBy» qui prend le paramètre pour déterminer dans quel ordre le trier. Vous pouvez l'utiliser comme
Pour une raison quelconque, il n'est pas documenté sur les documents du site Web.
la source
orderBy
, super utile! Bien mieux que d'utiliser le reverse, car il préserve la propriété de tri stable que je recherche.Souligner les mixins
En prolongeant la réponse de @ emil_lundberg, vous pouvez également écrire un "mixin" si vous utilisez Underscore pour créer une fonction personnalisée pour le tri s'il s'agit d'une sorte de tri que vous pourriez répéter dans une application quelque part.
Par exemple, vous avez peut-être un contrôleur ou affichez les résultats de tri avec l'ordre de tri "ASC" ou "DESC", et que vous souhaitez basculer entre ces types, vous pouvez faire quelque chose comme ceci:
Mixin.js
Exemple d'utilisation
Voici un JSFiddle démontrant ceci: JSFiddle pour SortBy Mixin
la source