export function chunk(input: Array, size: number) { return input.reduce( (arr, item, idx) => { return idx % size === 0 ? [...arr, [item]] : [...arr.slice(0, -1), [...arr.slice(-1)[0], item]]; }, [] as Array>, ); } export function zip(a1: Array, a2: Array) { const resultLength = Math.max(a1.length, a2.length); return new Array(resultLength).fill([]).map((_val, idx) => [a1[idx], a2[idx]]); } export function differenceBy(a1: Array, a2: Array, by: (arg: T) => string) { return a1.filter((c) => !a2.map((v) => by(v)).includes(by(c))); }