lodash 如何对元素进行分组和计数

伊利亚·沃

有数据

items = {
                0: {id:1,name:'foo'},
                1: {id:2,name:'bar'},
                2: {id:1,name:'foo'}
            };

我不会像这样计算元素

result = {
                0: {id:1,name:'foo', count:2},
                1: {id:2,name:'bar', count:1}
            };

lodash 有函数 _.countBy(items, 'name') 它有 {'foo': 2, 'bar':1},我也需要 id。

拉杰什

如果纯 JS 方法是可以接受的,你可以尝试这样的事情:

逻辑:

  • 循环遍历数组并复制对象并添加一个属性count并将其设置为0.
  • 现在在每次迭代时更新这个计数变量。
  • 使用以上 2 个步骤,创建一个 hashMap。
  • 现在再次循环 hashMap 并将其转换回数组。

var items = [{
    id: 1,
    name: 'foo'
  }, {
    id: 2,
    name: 'bar'
  }, {
    id: 1,
    name: 'foo'
  }
];

var temp = items.reduce(function(p,c){
  var defaultValue = {
    name: c.name,
    id: c.id,
    count: 0
  };
  p[c.name] = p[c.name] || defaultValue
  p[c.name].count++;
  
  return p;
}, {});

var result = [];
for( var k in temp ){
  result.push(temp[k]);
}

console.log(result)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章