export const difference = (...arrays: T[][]) => { return arrays.reduce((a, b) => a.filter((v) => !b.includes(v))); }; export const groupBy = (arr: Record[], key: string) => { return arr.reduce((r, a) => { r[a[key]] = [...r[a[key]], a]; return r; }, {}); }; export const keyBy = (arr: Record[], key: string) => { return arr.reduce((r, a) => { r[a[key]] = a; return r; }, {}); }; export const union = (...arrays: T[][]) => { return arrays.reduce((a, b) => [...a, ...b]); }; export const isIdenticalArray = (a1: T[], a2: T[]) => { // DEIs: http://stackoverflow.com/a/40496893/308645 return a1.length === a2.length && a1.reduce((a, b) => a && a2.includes(b), true); };