据我搜索,在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个元素。
我可以使用Select
和Count
在LINQ中轻松完成此操作。但我不知道如何在Underscore.js
中执行此操作。
感谢您的帮助。
答案 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}