partial-application code

Demonstration code for my Dev.To post on lenses using partial-application.

by Tracy-Gregory Gilmore

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...