使用下划线分组多个属性

时间:2017-08-14 18:57:46

标签: javascript underscore.js

我想按idname

对下面的数组进行分组和计数
var arr = [
        {
            id: 'A1',
            name: 'andersson'
        },
        {
            id: 'A1',
            name: 'johansson'
        },
        {
            id: 'A1',
            name: 'andersson'
        },
    ];

预期产出:

var aggregated = [
            {
                id: 'A1',
                name: 'andersson',
                count: 2
            },
            {
                id: 'A1',
                name: 'johansson',
                count: 1
            }
        ];

这应该是一项基本任务,但我找不到任何方便的方法来使用下划线。应该以某种方式使用_.groupBy函数。

我的数据集很大,因此性能非常重要。

1 个答案:

答案 0 :(得分:1)

您可以先groupBy ID并计算,然后使用map计算每个值。

var arr = [{
  id: 'A1',
  name: 'andersson'
}, {
  id: 'A1',
  name: 'johansson'
}, {
  id: 'A1',
  name: 'andersson'
}];

var result = _.chain(arr)
  .groupBy(e => e.id + '|' + e.name)
  .map(e => (e[0].count = e.length, e[0]))

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>