如何通过特定键合并数组中的项目?

Kan*_*rre 2 javascript arrays lodash

我有一个具有多个属性的JavaScript对象,这些属性的值是一个项目数组(type,count,senderUserName).

我想组合这些具有相同类型的数组中的项目,同时保留它们最初对应的键.

这是我的数组对象的示例:

{C.J :[
  {"type":"call","count":2,"senderUserName":"C.J.Rosati"},   
  {"type":"email","count":0,"senderUserName":"C.J.Rosati"},
  {"type":"sms","count":1,"senderUserName":"C.J.Rosati"},
  {"type":"sms","count":0,"senderUserName":"C.J.Rosati"},
  {"type":"email","count":6,"senderUserName":"C.J.Rosati"}
],
Will :[
  {"type":"call","count":2,"senderUserName":"Will"},   
  {"type":"email","count":1,"senderUserName":"Will"},
  {"type":"sms","count":0,"senderUserName":"Will"},
  {"type":"call","count":1,"senderUserName":"Will"},
  {"type":"call","count":1,"senderUserName":"Will"},
]}
Run Code Online (Sandbox Code Playgroud)

我想要的结果是:

{C.J :[
  {"type":"call","count":2,"senderUserName":"C.J.Rosati"},   
  {"type":"email","count":6,"senderUserName":"C.J.Rosati"},
  {"type":"sms","count":1,"senderUserName":"C.J.Rosati"}
],
Will :[
  {"type":"call","count":4,"senderUserName":"Will"},   
  {"type":"email","count":1,"senderUserName":"Will"},
  {"type":"sms","count":0,"senderUserName":"Will"},
]}
Run Code Online (Sandbox Code Playgroud)

我一直在玩lodash方法来获得我的结果,但没有任何运气.我想我可能需要使用的组合_.map_.reduce,但不知道如何将它们适当地组合.

Nen*_*car 5

你可以做到这一点reduce(),并forEach()在纯JavaScript.

var data = {'C.J' :[
  {"type":"call","count":2,"senderUserName":"C.J.Rosati"},   
  {"type":"email","count":0,"senderUserName":"C.J.Rosati"},
  {"type":"sms","count":1,"senderUserName":"C.J.Rosati"},
  {"type":"sms","count":0,"senderUserName":"C.J.Rosati"},
  {"type":"email","count":6,"senderUserName":"C.J.Rosati"}
],
'Will' :[
  {"type":"call","count":2,"senderUserName":"Will"},   
  {"type":"email","count":1,"senderUserName":"Will"},
  {"type":"sms","count":0,"senderUserName":"Will"},
  {"type":"call","count":1,"senderUserName":"Will"},
  {"type":"call","count":1,"senderUserName":"Will"},
]}
  
result = Object.keys(data).reduce(function(r, e) {
  var ar = [];
  data[e].forEach(function(a) {
    if (!this[a.type]) {
      this[a.type] = a;
      ar.push(this[a.type])
    } else {
      this[a.type].count += a.count;
    }
  }, {})
  r[e] = ar;
  return r;
}, {})

console.log(result)
Run Code Online (Sandbox Code Playgroud)