为了账号安全,请及时绑定邮箱和手机立即绑定

js如何合并对象数组中的某些项?

js如何合并对象数组中的某些项?

慕神8447489 2019-05-10 08:45:49
源数据:data:[{parkId:1,scheduleId:1,hasStock:false},{parkId:1,scheduleId:2,hasStock:false},{parkId:1,scheduleId:3,hasStock:false},{parkId:2,scheduleId:1,hasStock:false},{parkId:2,scheduleId:2,hasStock:false},{parkId:2,scheduleId:3,hasStock:false}]期望是将parkId相同的项合并组成以下格式:[{parkId:1,date:[{scheduleId:1,hasStock:false},{scheduleId:2,hasStock:false},{scheduleId:3,hasStock:false}]},{parkId:2,date:[{scheduleId:1,hasStock:false},{scheduleId:2,hasStock:false},{scheduleId:3,hasStock:false}]}]各位大佬有没有什么比较优雅的方式
查看完整描述

2 回答

?
www说

TA贡献1775条经验 获得超8个赞

letaux={}
letresult=[]
data.forEach(obj=>{
let{parkId,...restProps}=obj
if(!aux[parkId])aux[parkId]={parkId,data:[]}
aux[parkId].data.push({...restProps})
})
for(letkeyinaux){
result.push(aux[key])
}
使用aux作为一个储存中介,可以支持乱序
                            
查看完整回答
反对 回复 2019-05-10
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

data.map(d=>d.parkId).filter((v,idx,arr)=>arr.indexOf(v)===idx).map(parkId=>{
letd={parkId,data:[]}
d.data=data.filter(item=>item.parkId===parkId).map(item=>{
return{
scheduleId:item.scheduleId,
hasStock:item.hasStock
}
})
returnd
})
不过谈不上优雅。
                            
查看完整回答
反对 回复 2019-05-10
  • 2 回答
  • 0 关注
  • 1284 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信