Exercise 12: Provide alternative solution (#459)

* feat(12): improve solution by making it more cleaner

* refactor(12): rename `array` to `people`

* feat(12): improve explanation of `??=`

Co-authored-by: MaoShizhong <122839503+MaoShizhong@users.noreply.github.com>

* feat(12): include both solutions

* feat(12): hint to use various array methods

* refactor(12): add semicolon

Co-authored-by: MaoShizhong <122839503+MaoShizhong@users.noreply.github.com>

* feat(12): use block comments instead of line for readability

Co-authored-by: MaoShizhong <122839503+MaoShizhong@users.noreply.github.com>

* refactor(12): remove unnecessary comment

Co-authored-by: MaoShizhong <122839503+MaoShizhong@users.noreply.github.com>

---------

Co-authored-by: MaoShizhong <122839503+MaoShizhong@users.noreply.github.com>
This commit is contained in:
Nikita Revenco
2024-05-03 16:30:56 +01:00
committed by GitHub
parent 45a5ced879
commit 1695abe9d4
2 changed files with 29 additions and 8 deletions
+1 -1
View File
@@ -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.
@@ -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;