このような配列で: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"機能を改良し、少なくとも2つのフィールドでソートする機能を追加したいと考えていました。
が事のどんなものより「より良い」かもしれない?見つかったより一般的な例に基づいて
(実際はソートを安定に保つために '<='ではなく '<'を使用します) – Pointy
これはJSONではありません。 –
三項演算子を使用することができます: 'return a.lname.toUpperCase()> b.lname.toUpperCase()? 1:-1' –