export function MapGroupBy(data: Iterable, key: TKey): Map { const map = new Map(); const iterator: Iterator = data[Symbol.iterator](); let result: IteratorResult; while (!(result = iterator.next()).done) { let array: TData[]; const value: any = result.value[key]; if (map.has(value)) { array = map.get(value) as TData[]; } else { array = []; map.set(value, array); } array.push(result.value); } return map; }