partial-application code
Demonstration code for my Dev.To post on lenses using partial-application.
by Tracy-Gregory Gilmore
March 19, 2022
HTML
<h1>
Partical-Application
</h1>
<h2>
Results of the code examples for the <a href="https://dev.to/tracygjg/practical-use-of-partial-application-going-functional-one-step-at-a-time-3kc9-temp-slug-2464674">Dev.to article</a>.
</h2>
<main id="mainContainer">
</main>
CSS
table {
border-collapse: collapse;
margin: 1em;
}
th, td {
padding: 0.5em 1em;
}
JavaScript
(function simpleSortExample() {
const testData = ['Bob', 'Chris', 'Eve', 'Alice', 'Dave'];
testData.sort((person1, person2) => {
if (person1 === person2) return 0;
if (person1 > person2) return 1;
return -1;
});
consoleTable('Simple', testData);
})();
const testData = JSON.stringify([
{ name: 'Chris', dob: { year: 1980, month: 2, day: 1 } },
{ name: 'Bob', dob: { year: 1980, month: 8, day: 5 } },
{ name: 'Eve', dob: { year: 1980, month: 4, day: 2 } },
{ name: 'Dave', dob: { year: 1980, month: 6, day: 4 } },
{ name: 'Alice', dob: { year: 1980, month: 4, day: 3 } },
]);;
let results = '';
(function objectSortExample() {
results = JSON.parse(testData);
results.sort((person1, person2) => {
if (person1.dob.month === person2.dob.month) return 0;
if (person1.dob.month > person2.dob.month) return 1;
return -1;
});
resultsOutput('Object');
})();
(function lookupExample() {
function lookup(person) {
return person['dob']['month'];
}
results = sortTestData(lookup);
resultsOutput('Lookup');
})();
(function bindExample() {
function lookupGenerator(dob, month, person) {
return person[dob][month];
}
results = sortTestData(lookupGenerator.bind(null, 'dob', 'month'));
resultsOutput('Bind');
})();
(function recursiveExample() {
function lookupGenerator(...props) {
const _lookupGenerator = (obj, prop, ...props) =>
prop ? _lookupGenerator(obj[prop], ...props) : obj;
return obj => _lookupGenerator(obj, ...props);
}
results = sortTestData(lookupGenerator('dob', 'month'));
resultsOutput('Recursive');
})();
(function reduceExample() {
function lookupGenerator(...props) {
return obj =>
props.reduce((o, p) => p in o ? o[p] : null, obj);
}
results = sortTestData(lookupGenerator('dob', 'month'));
resultsOutput('Reduce');
const dayOfFourth = lookupGenerator('3', 'dob', 'day');
console.log(dayOfFourth(results));
})();
function sortTestData(lookup) {
return...