Вы можете использовать как простую reduce
с такой деструктурой:
const posts= [{post:'2920',user:'5a1d2f59cf81657f613b0683'},{post:'2920',user:'5a057915c31eb5601da9b75f'},{post:'2922',user:'5a057915c31eb5601da9b75f'},{post:'2998',user:'5a057915c31eb5601da9b75f'}]
const merged = posts.reduce((acc, {user,post}) => {
// check if user already exists in the accumulator else create
acc[user] = acc[user] || {user, post:[]}
acc[user]["post"].push(post)
return acc
}, {});
console.log(merged)
Вы можете сделать все это в одну строку следующим образом:
const posts= [{post:'2920',user:'5a1d2f59cf81657f613b0683'},{post:'2920',user:'5a057915c31eb5601da9b75f'},{post:'2922',user:'5a057915c31eb5601da9b75f'},{post:'2998',user:'5a057915c31eb5601da9b75f'}]
const merged = posts.reduce((acc, {user,post}) =>
((acc[user] = acc[user] || {user, post:[]})["post"].push(post), acc),{});
console.log(merged)