Currying code
Demonstration code for my Dev.To post on currying.
by Tracy-Gregory Gilmore
December 31, 2022
HTML
<h1>
Currying
</h1>
<h2>
Partial-application - part two
</h2>
<h2>
Results of the code examples for the <a href="https://dev.to/tracygjg/curried-functions-going-functional-one-step-at-a-time-4746">Dev.to article</a>.
</h2>
<main id="mainContainer">
</main>
<h1>
<i>That's all folkes!!</i>
</h1>
CSS
table {
border-collapse: collapse;
margin: 1em;
}
th, td {
padding: 0.5em 1em;
}
JavaScript
const testData = [
{name: 'Alice', age: 31},
{name: 'Bob', age: 32},
{name: 'Charlie', age: 33},
{name: 'David', age: 34},
{name: 'Eve', age: 35},
{name: 'Fred', age: 36}
];
consoleTable('Test Data', testData);
// mk1a
{
consoleMessage('Mk1a - Long-form filterConstuctor function');
{
const filterContains = filterConstuctor((prop, searchTerm) =>
prop.includes(searchTerm)
);
const nameContains = filterContains('name'); // prop
const nameContainsTheSearchTerm = nameContains('e');
const results = testData.filter(nameContainsTheSearchTerm);
consoleTable('Names containg "e"', results);
}
{
const filterGreaterThan = filterConstuctor(
(prop, searchAge) => prop > searchAge
);
const filterGreaterThanAge = filterGreaterThan('age');
const greaterThan32 = filterGreaterThanAge(32);
const results = testData.filter(greaterThan32);
consoleTable('People over 32 years of age', results);
}
function filterConstuctor(compareFn) {
return function getProperty(prop) {
return function getSearchTerm(searchTerm) {
return item => compareFn(item[prop], searchTerm);
};
};
}
}
// mk1b
{
consoleMessage('Mk1b - Short-form filterConstuctor function');
{
const filterContains = filterConstuctor((prop, searchTerm) =>
prop.includes(searchTerm)
);
const nameContains = filterContains('name'); // prop
const nameContainsTheSearchTerm = nameContains('e');
const results = testData.filter(nameContainsTheSearchTerm);
consoleTable('Names containg "e"', results);
}
{
const filterGreaterThan = filterConstuctor(
(prop, searchAge) => prop > searchAge
);
const filterGreaterThanAge = filterGreaterThan('age');
const greaterThan32 = filterGreaterThanAge(32);
const results = testData.filter(greaterThan32);
consoleTable('People over 32 years of age', results);
}
function filterConstuctor(compareFn) {
return prop => searchTerm => item => compareFn(item[prop], searchTerm);
}
}
//...