con una serie como esta:¿Cómo puedo ordenar una matriz 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' }
]
y desea ordenar por apellido con CoffeeScript, usted puede hacer esto:
users.sort (a,b) ->
return if a.lname.toUpperCase() >= b.lname.toUpperCase() then 1 else -1
He intentado utilizar una función como esta:
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]
que se invoca así:
users.sort sortBy "lname", false, (a) ->
return a.toUpperCase()
pero eso no ordenó la matriz correctamente.
¿Hay alguna manera de ordenar por más de 1 campo, es decir, ordenar primero por estado y luego por apellido? Esperaba mejorar la función "ordenar por arriba" y agregar la capacidad de ordenar por al menos 2 campos.
Qué tipo de cosas podría ser "mejor" que eso? (De hecho, usaría '<=' y no '<' para ayudar a mantener estable el género.) – Pointy
Eso no es JSON. –
Puede usar el operador ternario allí: 'return a.lname.toUpperCase()> b.lname.toUpperCase()? 1: -1' –