Underscore GroupBy排序

时间:2014-03-27 14:30:56

标签: node.js sorting functional-programming underscore.js

我对函数风格的编程有疑问。

我使用underscore.js库。

让我们考虑一些用例。我有一些带有重复的标签数组,我需要计算每个标签出现的次数,并根据出现次数对其进行排序。

为了计算,我可以使用多少个标签countBy

_.countBy([1, 2, 3, 4, 5], function(num) {
  return num % 2 == 0 ? 'even': 'odd';
});
=> {odd: 3, even: 2}

但是在这里,结果我有一个哈希,它对订单没有意义,所以没有排序。所以在这里,我需要将哈希值转换为数组然后对其进行排序并将其向后转换为哈希值。

我很确定有一种优雅的方式,但我不知道。 我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:2)

  

对它进行排序并向后转换为哈希。

不,那会再次失去订单。

您可以使用

var occurences = _.countBy([1, 2, 3, 4, 5], function(num) {
  return num % 2 == 0 ? 'even': 'odd';
});
// {odd: 3, even: 2}
var order = _.sortBy(_.keys(occurences), function(k){return occurences[k];})
// ["even", "odd"]

或者只是

_.sortBy(_.pairs(occurences), 1)
// [["even", 2], ["odd", 3]]