Skip to content

Instantly share code, notes, and snippets.

@gtrabanco
Last active February 25, 2025 20:51
Show Gist options
  • Save gtrabanco/7c97bd41aa74af974fa935bfb5044b6e to your computer and use it in GitHub Desktop.
Save gtrabanco/7c97bd41aa74af974fa935bfb5044b6e to your computer and use it in GitHub Desktop.
Object.groupBy polyfill
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'
)
);
@gtrabanco
Copy link
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