Coffeescript-遍历对象';s键/值-返回排序数组

Coffeescript-遍历对象';s键/值-返回排序数组,coffeescript,Coffeescript,我有一个对象,其中键表示国家短代码,值表示计数。我想遍历这个对象并返回一组计数最高的国家。我对Coffeescript还不熟悉,不确定最优雅的处理方式。非常感谢您的帮助。谢谢 以下面的数据为例,我希望数组返回['AU',US','BR','CN','IN'] vacation_spots = { AU: 3, BR: 2, CF: 1, CN: 2, IN: 2, MX: 1, SD: 1, TD: 1, TM: 1, US: 3 } get_top_5

我有一个对象,其中键表示国家短代码,值表示计数。我想遍历这个对象并返回一组计数最高的国家。我对Coffeescript还不熟悉,不确定最优雅的处理方式。非常感谢您的帮助。谢谢

以下面的数据为例,我希望数组返回
['AU',US','BR','CN','IN']

vacation_spots = {
  AU: 3,
  BR: 2,
  CF: 1,
  CN: 2,
  IN: 2,
  MX: 1,
  SD: 1,
  TD: 1,
  TM: 1,
  US: 3
}

get_top_5(vacation_spots)

get_top_5 = (items) ->
    for k, v of items
    # ?
试一试

试一试


使用vanilla JS数组方法:

get_top_5 = (items) ->
  codes = (k for k of items)
  sortedCodes = codes.sort (a, b) -> items[b] - items[a]
  sortedCodes[...5]
您可以将其压缩为一个表达式,如
(k代表k个项)。sort((a,b)->items[b]-items[a])[…5]
,但我认为将每个步骤分开会更好一些

排序步骤根据
项目
对象上的值对国家代码进行排序;它使用该方法,该方法需要一个接受两个参数并返回一个整数的比较器函数。如果包含下划线.js,我建议使用,它使用comparator函数,只接受一个参数并返回一个可比较的对象:

sortedCodes = _.sortBy codes, (code) -> -items[code]

编辑:此外,您可以使用
对象,而不是
(k代表k个项目)
(注意,即使用普通JS数组方法:

get_top_5 = (items) ->
  codes = (k for k of items)
  sortedCodes = codes.sort (a, b) -> items[b] - items[a]
  sortedCodes[...5]
您可以将其压缩为一个表达式,如
(k代表k个项)。sort((a,b)->items[b]-items[a])[…5]
,但我认为将每个步骤分开会更好一些

排序步骤根据
items
对象上的值对国家代码进行排序;它使用的方法需要一个带两个参数并返回一个整数的比较器函数。如果包含下划线.js,我建议使用,它使用只带一个参数并返回一个可比较对象的比较器函数:

sortedCodes = _.sortBy codes, (code) -> -items[code]

编辑:另外,您可以使用
对象。键(项目)
(注意,即您的意思是
sortedCodes[…5]
?@Kyle是!谢谢您的注意:)而不是
(k代表k个项目)
?@Kyle是!谢谢您的注意:)