function myRollup(data, reduceFunc, keyFunc) {
const map = new Map();
for (const row of data) {
const key = keyFunc(row);
const group = map.get(key);
if (group === undefined) {
map.set(key, [row]);
} else {
group.push(row);
}
}
for (const keyValuePair of map) {
const key = keyValuePair[0];
const group = keyValuePair[1];
map.set(key, reduceFunc(group));
}
return map;
}