forked from akai/readest
30 lines
615 B
TypeScript
30 lines
615 B
TypeScript
// A groupBy polyfill for foliate-js
|
|
Object.groupBy ??= (iterable, callbackfn) => {
|
|
const obj = Object.create(null);
|
|
let i = 0;
|
|
for (const value of iterable) {
|
|
const key = callbackfn(value, i++);
|
|
if (key in obj) {
|
|
obj[key].push(value);
|
|
} else {
|
|
obj[key] = [value];
|
|
}
|
|
}
|
|
return obj;
|
|
};
|
|
|
|
Map.groupBy ??= (iterable, callbackfn) => {
|
|
const map = new Map();
|
|
let i = 0;
|
|
for (const value of iterable) {
|
|
const key = callbackfn(value, i++),
|
|
list = map.get(key);
|
|
if (list) {
|
|
list.push(value);
|
|
} else {
|
|
map.set(key, [value]);
|
|
}
|
|
}
|
|
return map;
|
|
};
|