diff --git a/12_findTheOldest/README.md b/12_findTheOldest/README.md index 087f45e..e95cd59 100644 --- a/12_findTheOldest/README.md +++ b/12_findTheOldest/README.md @@ -6,5 +6,5 @@ Now that you've reached the final exercise, you should be fairly comfortable get ## Hints - You should return the whole person object, but the tests mostly just check to make sure the name is correct. -- This can be done with a couple of chained array methods, or by using `reduce`. +- There are many ways of doing this using built-in array methods like `reduce`, or even chaining multiple! - One of the tests checks for people with no death-date.. use JavaScript's Date function to get their age as of today. diff --git a/12_findTheOldest/solution/findTheOldest-solution.js b/12_findTheOldest/solution/findTheOldest-solution.js index ae4e272..6229a5f 100644 --- a/12_findTheOldest/solution/findTheOldest-solution.js +++ b/12_findTheOldest/solution/findTheOldest-solution.js @@ -1,5 +1,12 @@ -const findTheOldest = function (array) { - return array.reduce((oldest, currentPerson) => { +const getAge = function (birth, death) { + if (!death) { + death = new Date().getFullYear(); + } + return death - birth; +}; + +const findTheOldest = function (people) { + return people.reduce((oldest, currentPerson) => { const oldestAge = getAge(oldest.yearOfBirth, oldest.yearOfDeath); const currentAge = getAge( currentPerson.yearOfBirth, @@ -9,11 +16,25 @@ const findTheOldest = function (array) { }); }; -const getAge = function (birth, death) { - if (!death) { - death = new Date().getFullYear(); - } - return death - birth; +/* ALTERNATIVE SOLUTION +const getAge = function (person) { + // The nullish coalescing assignment operator + // only does the assignment if the left side is "nullish" (evaluates to undefined or null) + // if the left side has any other value, no assignment happens + // here, we use ??= to set the current year for our subtraction below only if there is no year of death + person.yearOfDeath ??= new Date().getFullYear(); + + return person.yearOfDeath - person.yearOfBirth; }; +const findTheOldest = function (people) { + const peopleOldestToYoungest = people.toSorted( + (person, nextPerson) => getAge(nextPerson) - getAge(person), + ); + + const oldestPerson = peopleOldestToYoungest[0]; + return oldestPerson; +}; +*/ + module.exports = findTheOldest;