Skip to content

Instantly share code, notes, and snippets.

@jbdesbas
Last active January 17, 2024 20:03
Show Gist options
  • Save jbdesbas/456b54d72dc70ff98140d717c8a82754 to your computer and use it in GitHub Desktop.
Save jbdesbas/456b54d72dc70ff98140d717c8a82754 to your computer and use it in GitHub Desktop.
Javascript groupby
const dataGroupBy = (data:[], group_fields:string[], metric_field:string, method:string) => {
const agg_function:(arr:[], field:string) => number = ((arr, field) => {
switch(method){
case 'sum':
return _.sumBy(arr, field)
case 'min':
return _.minBy(arr, field)[field]
case 'max':
return _.maxBy(arr, field)[field]
case 'avg': //wip
return _.sumBy(arr, field) / arr.length
case 'count':
return arr.length
}
});
return _.chain(data).groupBy((i)=>group_fields.map(f=>i[f]).join('|')).map((v)=>({
...Object.fromEntries(group_fields.map(field => [field, v[0][field]])),
[`${metric_field}_${method}`]:agg_function(v, metric_field)})
).value()
}
@jbdesbas
Copy link
Author

Nécessite lodash.
Avec Object.groupBy, le code pourra être adapté en vanilla. Mais pour l'instant supporté seulement par des navigateurs récents (2023-10) : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/groupBy

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment