有一个像这样的数组:
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()
但是那样无法正确地对数组进行排序。
有没有一种方法可以按多个字段进行排序,例如先按州份排序,然后再按姓氏排序?我希望改进上面的“sortBy”函数,并添加按至少两个字段进行排序的功能。
<=
而不是<
来帮助保持排序稳定。) - Pointy