Group By

Medium

Solution

declare global {
  interface Array<T> {
    groupBy(fn: (item: T) => string): Record<string, T[]>;
  }
}
 
Array.prototype.groupBy = function (fn) {
  return this.reduce((group, item) => {
    const key = fn(item);
    if (group[key]) {
      group[key].push(item);
    } else {
      group[key] = [item];
    }
    return group;
  }, {});
};
 
export {};