有一個這樣的數組:如何使用coffeescript對Array進行排序?
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」功能,並添加至少2個字段的排序功能。
什麼樣的事情可能比「更好」? (其實我會用'<='而不是'<'來幫助保持排序穩定。) – Pointy 2012-03-20 23:59:14
這不是JSON。 – 2012-03-20 23:59:56
你可以在那裏使用三元運算符:'返回a.lname.toUpperCase()> b.lname.toUpperCase()? 1:-1' – 2012-03-21 00:00:26