con un array come questo:Come si ordina una matrice con coffeescript?
users = [
{ id: 1, fname: 'Fred', lname: 'Flinstone', state: 'CA' },
{ id: 2, fname: 'George', lname: 'Winston', state: 'FL' },
{ id: 3, fname: 'Luke', lname: 'Skywalker', state: 'CA' }
]
e si desidera ordinare per cognome con CoffeeScript, si può fare questo:
users.sort (a,b) ->
return if a.lname.toUpperCase() >= b.lname.toUpperCase() then 1 else -1
Ho provato ad utilizzare una funzione come questa:
sortBy = (field, reverse, primer) ->
key = (x) ->
return if primer? then primer x[field] else x[field]
return (a,b) ->
A = key a
B = key b
return (A < B ? -1 : (A > B ? 1 : 0)) * [1,-1][+!!reverse]
invocato in questo modo:
users.sort sortBy "lname", false, (a) ->
return a.toUpperCase()
ma quello non ha ordinato correttamente la matrice.
C'è un modo per ordinare da più di 1 campo, cioè ordinare prima per stato e poi per cognome? Speravo di migliorare la funzione "sortBy" sopra e aggiungere la possibilità di ordinare almeno 2 campi.
Che genere di cosa potrebbe essere "migliore" di quello? (In realtà io userei '<=' e non '<' per mantenere stabile l'ordinamento.) – Pointy
Questo non è JSON. –
Qui puoi utilizzare l'operatore ternario: 'return a.lname.toUpperCase()> b.lname.toUpperCase()? 1: -1' –