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
,但不知道如何将它们适当地组合.
你可以做到这一点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)