@segment/analytics-next
Version:
Analytics Next (aka Analytics 2.0) is the latest version of Segment’s JavaScript SDK - enabling you to send your data to any tool without having to learn, test, or use a new API every time.
31 lines (24 loc) • 684 B
text/typescript
type Grouper<T> = (obj: T) => string | number
export function groupBy<T>(
collection: T[],
grouper: keyof T | Grouper<T>
): Record<string, T[]> {
const results: Record<string, T[]> = {}
collection.forEach((item) => {
let key: string | number | undefined = undefined
if (typeof grouper === 'string') {
const suggestedKey = item[grouper]
key =
typeof suggestedKey !== 'string'
? JSON.stringify(suggestedKey)
: suggestedKey
} else if (grouper instanceof Function) {
key = grouper(item)
}
if (key === undefined) {
return
}
results[key] = [...(results[key] ?? []), item]
})
return results
}