All files / array/operator groupBy.ts

100% Statements 12/12
100% Branches 2/2
100% Functions 2/2
100% Lines 10/10

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19    3x   6x 6x 4x 4x 4x 3x 3x   4x   2x        
import {Dictionary, KeyProjection} from 'fnxt/fnxt-types';
 
export const groupBy = <E>(mapping: KeyProjection<E>) => (array: E[]): E[][] => {
 
  const map: Dictionary<E[]> = {};
  for (const element of array) {
    const key = mapping(element);
    let list = map[key];
    if (!list) {
      list = [];
      map[key] = list;
    }
    list.push(element);
  }
  return Object.values(map);
 
};