如何使用下划线从其他列表创建具有重复次数的对象列表?

时间:2014-02-16 15:10:09

标签: angularjs underscore.js

我遵循的方法是根据计数创建随机数组(参见Fiddle

$scope.generateRandomData = function(min, max, count){
       var out = _(count).times(function(n){return _.random(min, max)});
       return out;
    }

我是underscorejs中的新人,我想知道我是否可以轻松地从随机列表新列表中创建每个元素代表重复的valuecount

例如,如果我有:

输入

[1,4,2,3,4,4,1,4]

预期输出

[ 
  {value: 1, count: 2},
  {value: 2, count: 1},
  {value: 3, count: 1},
  {value: 4, count: 4}
]

谢谢,

1 个答案:

答案 0 :(得分:2)

尝试:

 var randList = _(count).times(function(n){return _.random(min, max)});

 var out =  _.chain(randList).countBy().pairs().value();

参见演示 Fiddle

  

<强> countBy :   将列表排序到组中并返回对象数的计数   在每个小组中。

     

<强>对:   将对象转换为[key, value]对列表。

它应该返回第一个值为value的对象列表,第二个值为frequency

在那之后:

 var out2 =  _.map(out, function(value){ 
      return {'value':value[0], 'count':value[1]};
  });

输入:

[1, 1, 2, 1, 0, 0, 2, 2, 1, 2] 

输出:

[
  {
    "value": "0",
    "count": 2
  },
  {
    "value": "1",
    "count": 7
  },
  {
    "value": "2",
    "count": 1
  }
]