I'm trying to group the following array with objects:
[ { user_id: 301, alert_id: 199, deal_id: 32243 }, { user_id: 301, alert_id: 200, deal_id: 32243 }, { user_id: 301, alert_id: 200, deal_id: 107293 }, { user_id: 301, alert_id: 200, deal_id: 277470 } ]
As you can see it contains user_id and alert_id combinations, which I like to group. So I would like to have the following array:
[ { user_id: 301, alert_id: 199, deals: [32243] }, { user_id: 301, alert_id: 200, deals: [32243,107293,277470]}]
Anyone knows a solution for this? With underscore's GroupBy I can group the values based on one key. But I need to group them, based on the combination user_id AND alert_id, as you can see.
I took a look at underscore.nest, but the problem is it creates its own keys.
Use groupBy with a function that creates a composite key using user_id and alert_id. Then map across the groupings to get what you want:
var list = [ { user_id: 301, alert_id: 199, deal_id: 32243 }, { user_id: 301, alert_id: 200, deal_id: 32243 }, { user_id: 301, alert_id: 200, deal_id: 107293 }, { user_id: 301, alert_id: 200, deal_id: 277470 } ]; var groups = _.groupBy(list, function(value){ return value.user_id + '#' + value.alert_id; }); var data = _.map(groups, function(group){ return { user_id: group[0].user_id, alert_id: group[0].alert_id, deals: _.pluck(group, 'deal_id') } });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With