Skip to content

Instantly share code, notes, and snippets.

View chalu's full-sized avatar

Charles Opute Odili chalu

View GitHub Profile
const isFemale = match('gender', is('female'));
const isYoungAdult = match('age', isOrOver(18));
const canPlayNightOwl = match('age', isUnder(60));
const ageIsSpecialNumber = match('age', isMultipleOf(4));
const getSpecialFemaleDevs = chain(
isFemale,
isYoungAdult,
canPlayNightOwl,
ageIsSpecialNumber
const is = (target) => (value) => value === target;
const isOver = (target) => (value) => value > target;
const isOrOver = (target) => (value) => value >= target;
// match devs over 24 years old
const olderThan24 = match('age', isOver(24));
const over24s = olderThan24(data);
// match devs at, or over 35 years old
const aged35OrOlder = match('age', isOrOver(35));
const isOver24 = (value) => value > 24;
const getOver24s = match('age', isOver24);
const over24s = getOver24s(data);
const match = (field, delegate) => {
return (data = []) => {
return data.filter(entry => delegate(entry[field]));
}
};
const isMale = (value) => value === 'male';
const isFemale = (value) => value === 'female';
const getFemales = match('gender', isFemale);
const femaleDevs = getFemales(data);
const sumAges = compute(sumOf, 'age');
const sumOfAge = sumAges(data);
const avgAge = compute(averageOf, 'age');
const averageAge = avgAge(data);
console.log(`... while total age of African developers was ${sumOfAge}, the average age was ${averageAge}`);
const sumOf = (data = [], field) => {
return data.reduce((sum, entry) => {
return sum += entry[field] || 0;
}, 0);
};
const averageOf = (data = [], field) => {
return data.reduce((sum = 0, entry, index) => {
const sum += (entry[field] || 0);
const compute = (delegate, field) => {
return (data) => delegate(data, field);
};
const avgAge = compute(averageOf, 'age');
const avgOfAges = avgAge(data);
const sumAges = compute(sumOf, 'age');
const sumOfAge = sumAges(data);