如何在Underscore.js中一起进行groupBy,过滤和计数?

时间:2015-12-09 04:35:45

标签: javascript linq underscore.js

据我搜索,在Underscore.js中,我们可以使用groupBy函数。这是语法:

_.groupBy(list, iteratee, [context])

例如,我们执行:_.groupBy(['one', 'two', 'three'], 'length');

然后,结果是:{3: ["one", "two"], 5: ["three"]}

如您所见,结果包含2组。 现在,我想要的是:获取用于分组的标准,以及每组中元素的总数。

所以,结果应该是:{3: 2, 5: 1}。因为set 3有2个元素,而set 5有1个元素。

我可以使用SelectCount在LINQ中轻松完成此操作。但我不知道如何在Underscore.js中执行此操作。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您可以使用_.countBy method

_.countBy(['one', 'two', 'three'], 'length');
// {3: 2, 5: 1}

从文档中,这与您要实现的目标相符:

  

将列表分组到组中并返回对象数的计数   在每个小组中。与groupBy类似,但不是返回列表   值,返回该组中值的数量。

答案 1 :(得分:0)

如果我正确理解了这个问题,这应该有效:

_.each(
  _.groupBy(['one','two','three'],'length'),
  function(x,y,z){
    z[y]=x.length;
  }
);

答案 2 :(得分:0)

您可以使用_.mapObject()

var grouped = _.groupBy(['one', 'two', 'three'], 'length');
var result = _.mapObject(grouped, function(items) {
  return items.length;
}); // {3: 2, 5: 1}