web-dev-qa-db-fra.com

Underscore.js Tri insensible à la casse

Avoir quelques petits problèmes en essayant d'obtenir underscore.js pour effectuer un tri non sensible à la casse. J'ai un tableau d'objets et je voudrais pouvoir trier par nom de propriété.

Utilisation de la méthode de raccourci sortBy

iteratee peut également être le nom de chaîne de la propriété à trier (par exemple, la longueur).

Tableau à trier:

var array = [{ name: 'test_1234', description: 'zzaaa bb cc'}, 
         { name: 'zz1111', description: 'ZAAbbbcc'}, 
         { name: 'TEST', description: '4422'}, 
         { name: '1a2929', description: 'abcdef'}, 
         { name: 'abc', description: 'Full description'}, 
         { name: 'GGGGH', description: '123456'}];

Triant à l'aide de cette méthode, sortProperty = 'nom', le résultat place les majuscules avant les minuscules.

var sorted = _.sortBy(array, sortProperty);

1a2929 - abcdef
GGGGH - 123456
TEST - 4422
abc - Full description
test_1234 - zzaaa bb cc
zz1111 - ZAAbbbcc

Je suppose que cela a à voir avec la sensibilité à la casse, mais je ne peux pas comprendre comment changer les noms dans le tableau en minuscules et comparer de cette façon.

Toute aide est grandement appréciée.

Edit: Comme indiqué, vous passez un nom ou une fonction, il suffit donc d'ajuster la fonction pour retourner le champ à trier par: http://jsfiddle.net/rjaqp1vg/5/

27
user1549008

Le nom à trier peut être le nom du champ OR une fonction, donc passez une fonction qui effectue une conversion en minuscules.

var sorted = _.sortBy(array, function (i) { return i.name.toLowerCase(); });

devrait faire l'affaire.

68
Chris Tavares

N'utilisez pas _.sortBy pour cela. La bonne façon de trier les chaînes par ordre alphabétique consiste à utiliser localeCompare. Voici un exemple en pur Javascript:

['Z', 'A','z','á', 'V'].sort(function(a, b){
   return a.localeCompare(b, undefined /* Ignore language */, { sensitivity: 'base' }) 
});

Voir https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare .

15
Brad Vogel