z tablicy jak poniżej:Jak sortować tablicę z coffeescript?
users.sort (a,b) ->
return if a.lname.toUpperCase() >= b.lname.toUpperCase() then 1 else -1
Próbowałem przy użyciu funkcji takich jak to::
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]
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' }
]
i chcesz sortować według nazwiska z coffeescript, można to zrobić
, która została wywołana w ten sposób:
users.sort sortBy "lname", false, (a) ->
return a.toUpperCase()
ale to nie posortowało poprawnie tablicy.
Czy istnieje sposób sortowania według więcej niż 1 pola, tj. Sortowanie najpierw według stanu, a następnie według nazwiska? Miałem nadzieję ulepszyć powyższą funkcję "sortBy" i dodać możliwość sortowania według co najmniej 2 pól.
Jakie rzeczy może być „lepszy” niż to? (Właściwie użyłbym '<=', a nie '<', aby utrzymać stabilność w sortowaniu.) – Pointy
To nie jest JSON. –
Możesz użyć tamtejszego operatora: 'return a.lname.toUpperCase()> b.lname.toUpperCase()? 1: -1' –