Как отсортировать массив с помощью 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' }
]

и вы хотите отсортировать по фамилии с помощью coffeescript, вы можете сделать это:

users.sort (a,b) ->
  return if a.lname.toUpperCase() >= b.lname.toUpperCase() then 1 else -1

Я пытался использовать такую ​​функцию:

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.sort sortBy "lname", false, (a) -> 
  return a.toUpperCase()

, но она не сортировала массив должным образом.

Есть ли способ сортировки по более чем 1 полю, т. е. сортировка сначала по штату, а затем по фамилии? Я надеялся улучшить функцию sortBy выше и добавить возможность сортировки как минимум по двум полям.

20
задан mu is too short 21 March 2012 в 00:41
поделиться