declare global { interface Array { groupBy(fn: (item: T) => string): Record; } } Array.prototype.groupBy = function (fn) { const obj: Record = {}; for (const v of this) { (obj[fn(v)] ??= []).push(v); } return obj; }; /** * [1,2,3].groupBy(String) // {"1":[1],"2":[2],"3":[3]} */