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/
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.
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' })
});