En utilisant Javascript avec Underscore.js pour trier l'autre sens

J'utilise Javascript sort (avec Underscore.js):

 _.sortBy(["Bob", "Mary", "Alice"], function (name) {return name}) > ["Alice", "Bob", "Mary"] 

J'aimerais que le tableau revienne dans l'autre sens. Comment je fais ça?

["Mary", "Bob", "Alice"]

Je ne veux pas l'inverser après avoir trié – Je veux qu'il soit créé autrement la première fois.

Merci.

Je voudrais simplement faire ce qu'est le sous-titre sous le capot: utilisez la méthode de tri Array # .

 ["Bob", "Mary", "Alice"].sort(function (a, b) { if (a < b) return 1; if (b < a) return -1; return 0; }); 

Ou si vous ne voulez pas modifier le tableau d'origine, cloquez-le d'abord:

 _.clone(["Bob", "Mary", "Alice"]).sort(...) 

Au lieu de lancer le soulignement, je préfère l'utiliser avec Array.reverse pour utiliser le meilleur des deux.

 _.sortBy(["Bob", "Mary", "Alice"], function (name) {return name}) .reverse() 

De toute évidence, vous ne devriez pas le faire, car il est beaucoup plus logique de trier, puis inverser les résultats, mais si vous souhaitez vraiment trier dans l'ordre inverse dans la fonction de tri, vous pouvez faire quelque chose comme ça …

 _.sortBy(["Bob", "Mary", "Alice"], function (a) { // split each string into single characters // ... then swap for inverse character from unicode range // ... and glue the characters back together into an inversely sortable string return _.map(a.split(''), function(i){ return String.fromCharCode(65536 - i.charCodeAt(0)); }).join(''); }); 

… il vaut mieux noter que le trait de soulignement est subtilement différent du type javascript natif qui a un petit problème de plate-forme croisée concernant l'ordre de tri cohérent …

Si compareFunction (a, b) renvoie 0, laissez a et b inchangés l'un par rapport à l'autre, mais triés par rapport à tous les éléments différents. Remarque: la norme ECMAscript ne garantit pas ce comportement et, par conséquent, tous les navigateurs (par exemple, les versions de Mozilla remontant à au moins 2003) respectent cela. Array.prototype.sort ()

La documentation .sortBy de Underscore indique:

Renvoie une liste de copie triée (stable). _.Trier par

Ce qu'il fait au lieu de renvoyer 0 pour garder les éléments en ordre, il renvoie l'index du côté gauche moins l'index du côté droit.

 _.sortBy = function(obj, iteratee, context) { iteratee = cb(iteratee, context); return _.pluck(_.map(obj, function(value, index, list) { return { value: value, index: index, criteria: iteratee(value, index, list) }; }).sort(function(left, right) { var a = left.criteria; var b = right.criteria; if (a !== b) { if (a > b || a === void 0) return 1; if (a < b || b === void 0) return -1; } return left.index - right.index; }), 'value'); };