gpt4 book ai didi

arrays - 如何使用 CoffeeScript 对数组进行排序?

转载 作者:行者123 更新时间:2023-12-03 11:50:06 24 4
gpt4 key购买 nike

使用这样的数组:

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”功能,并添加至少按 2 个字段排序的能力。

最佳答案

有一个更简单的方法。只需重新使用您的广义排序函数,并使用 || 连接它们:

sortBy = (key, a, b, r) ->
r = if r then 1 else -1
return -1*r if a[key] > b[key]
return +1*r if a[key] < b[key]
return 0

users.sort (a,b) ->
sortBy('id', a, b, true) or
sortBy('lname', a, b) or
sortBy('fname', a, b)

功能便宜。然后,您可以为此构建一个抽象:
sortByMultiple = (a, b, keys) ->
return r if (r = sortBy key, a, b) for key in keys
return 0

users.sort (a,b) -> sortByMultiple a, b, ['id', 'lname', 'fname']

但是随后您将失去为每个参数设置顺序或其他参数的能力。

关于arrays - 如何使用 CoffeeScript 对数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9796764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com