如何获取指定集合中的元素数量等于指定的对象下划线?

时间:2013-12-20 16:35:15

标签: angularjs underscore.js

我使用underscore库并想知道我是否可以轻松获取列表中特定项目的频率。

例如,我有数组:

var list = ['a', 'b', 'c', 'a'];

我想要类似的东西:

var count_a = /*returnCountFunction*/(list, 'a'); // 2.
var count_b = /*returnCountFunction*/(list, 'b'); // 1.

我很有意思只使用下划线.JS。

Java有: Collections.frequency(list, "a");

[编辑]

实际上我有复杂的对象列表,但我写道:

$scope.getUniqueBiz = function(list){    
        return _.chain(list)
      .pluck('biz_name')
       .unique()
      .value();    
    };

谢谢,

3 个答案:

答案 0 :(得分:2)

_.countBy

  

将列表分组到组中并返回对象数的计数   在每个小组中。

所以这个:

result = _.countBy(list);

返回此(在您的列表中):

  

{a:2,b:1,c:1}

你可以从中获取:

result['a']; 

答案 1 :(得分:1)

这应该这样做:

_.filter(['a', 'b', 'c', 'a'], function(item){ return item == 'a'; }).length;

答案 2 :(得分:1)

var search = 'a';
var result = _.reduce(['a', 'b', 'c', 'a'], function(sum, letter) {
    return letter === search ? sum + 1 : sum;
  }, 0);