我想合并JSON数组的一些具有特定键重复值的对象。
我有json数组像这样:
var data=[
{ type:"XO",
logID:"213323",
user:"34324234"
},
{ type:"YO",
logID:"2323323",
user:"1212234"
},
{ type:"XO",
logID:"676323323",
user:"45465412234"
},
,
{ type:"ZO",
logID:"1231434323",
user:"35739434"
}
]
这里我想根据键'type'合并JSON对象。所以同样的类型看起来像这个新键:
var expectedOutput:[
{
type:XO,
text: [
{
logID:"213323",
user:"34324234"
},
{
logID:"676323323",
user:"45465412234"
}
]
},
{ type:"YO",
text:[
{
logID:"2323323",
user:"1212234"
}
]
},
{
type:"ZO",
text:[
{
logID:"1231434323",
user:"35739434"
}
]
}
]
答案 0 :(得分:2)
您可以使用lodash#groupBy
按type
对集合进行分组,使用lodash#map
将每个组对象格式转换为组数组格式。要从type
数组中删除text
属性,我们将使用lodash#omit
部分应用lodash#partial
函数。
var result = _(data)
.groupBy('type')
.map(function(group, type) {
return {
type: type,
text: _.map(group, _.partial(_.omit, _, 'type'))
};
})
.value();
var data = [{
type: "XO",
logID: "213323",
user: "34324234"
},
{
type: "YO",
logID: "2323323",
user: "1212234"
},
{
type: "XO",
logID: "676323323",
user: "45465412234"
},
{
type: "ZO",
logID: "1231434323",
user: "35739434"
}
];
var result = _(data)
.groupBy('type')
.map(function(group, type) {
return {
type: type,
text: _.map(group, _.partial(_.omit, _, 'type'))
};
})
.value();
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>