2016-06-16 9 views
26

Ich habe this answer aber das gleiche Ergebnis zu erzielen, dh Groß- und Kleinschreibung Sortierung zu bekommen, muß ich orderBy statt sortBy verwenden, da es die Möglichkeit gibt, die Sortierreihenfolge zu spezifizieren.Lodash: Wie sortiere ich eine Sortierung nach Groß- und Kleinschreibung in einer Kollektion mit orderBy?

Die einzige Art, wie ich es zu erreichen fand, war ein geklonter „Mitte“ Array Fall abgebildet erstellen die name zu senken:

const users = [ 
    { name: 'A', age: 48 }, 
    { name: 'B', age: 34 }, 
    { name: 'b', age: 40 }, 
    { name: 'a', age: 36 } 
]; 

let lowerCaseUsers = _.clone(users); 

lowerCaseUsers = lowerCaseUsers.map((user) => { 
    user.name = user.name.toLowerCase(); 
    return user; 
}); 

const sortedUsers = _.orderBy(lowerCaseUsers, ['name'], ['desc']); 

console.log(sortedUsers); 

Dies scheint sehr teuer und es sogar mit mehreren Sortierungen komplexer sein wird und dynamische Eigenschaftennamen.

Gibt es eine bessere Idee? Hier


ist ein Plunker: https://plnkr.co/edit/i1ywyxjFctuNfHtPTcgG

Antwort

66

Die documentation gibt an, dass eine Funktion als "iteratee" passieren kann:

[iteratees=[_.identity]] (Array[]|Function[]|Object[]|string[]): The iteratees to sort by.

So können Sie

tun

const users = [ 
 
    { name: 'A', age: 48 }, 
 
    { name: 'B', age: 34 }, 
 
    { name: 'b', age: 40 }, 
 
    { name: 'a', age: 36 } 
 
]; 
 

 
const sortedUsers = _.orderBy(users, [user => user.name.toLowerCase()], ['desc']); 
 
console.log(sortedUsers);
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>

+1

Dies kann in älteren Browsern fehlschlagen. – steampowered

+4

Wenn Sie meinen, dass dies einen Syntaxfehler im Browser verursacht, der ES6 nicht unterstützt, dann natürlich. Ich werde die Umwandlung der Pfeilfunktion in eine "normale" Funktion (und "const" in "var") als Übung für den Leser verlassen. –

+0

Funktioniert das mit dynamischen Eigenschaftsnamen? – TheCaptan