怎么组和计数元素由lodash

时间:2017-10-30 11:14:25

标签: 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。

1 个答案:

答案 0 :(得分:2)

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

Logiic:

  • 循环数组并复制对象并添加属性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)