Last active
September 17, 2025 19:07
-
-
Save gtrabanco/7c97bd41aa74af974fa935bfb5044b6e to your computer and use it in GitHub Desktop.
Object.groupBy polyfill
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const hasGroup = typeof Object.groupBy === typeof undefined || typeof Array.groupToMap === typeof undefined || typeof Array.group === typeof undefined; | |
| if (!hasGroup) { | |
| const groupBy = (arr, callback) => { | |
| return arr.reduce((acc = {}, ...args) => { | |
| const key = callback(...args); | |
| acc[key] ??= [] | |
| acc[key].push(args[0]); | |
| return acc; | |
| }, {}); | |
| }; | |
| if (typeof Object.groupBy === typeof undefined) { | |
| Object.groupBy = groupBy; | |
| } | |
| if (typeof Array.groupToMap === typeof undefined) { | |
| Array.groupToMap = groupBy; | |
| } | |
| if (typeof Array.group === typeof undefined) { | |
| Array.group = groupBy; | |
| } | |
| } | |
| // There are better approaches using loops directly instead of reduce | |
| // Example: | |
| console.log( | |
| Object.groupBy( | |
| [1, 2, 3, 4, 5, 6], | |
| (v) => v % 2 === 0 ? 'even': 'odd' | |
| ) | |
| ); |
Author
if (typeof Object.groupBy === typeof undefined) {
Object.groupBy = groupBy;
}This can be omitted because at least first condition must match to be inside the first if.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
In other words: