Imperative:
export default expressions => mapIterator(row => {
const projection = {};
for (const colName in expressions) {
const expression = expressions[colName];
projection[colName] = expression(row);
}
return projection;
});
functional:
const mapObjectValues = obj => mapper => {
const result = {};
Object.entries(obj).forEach(([key, value]) => {
result[key] = mapper(value);
});
return result;
};
export default expressions => {
const mapExpressions = mapObjectValues(expressions);
return mapIterator(row => mapExpressions(expression => expression(row)));
};