mirror of
https://github.com/10h30/odin-javascript-exercises.git
synced 2026-07-11 18:55:59 +09:00
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:
@@ -6,5 +6,5 @@ Now that you've reached the final exercise, you should be fairly comfortable get
|
|||||||
|
|
||||||
## Hints
|
## Hints
|
||||||
- You should return the whole person object, but the tests mostly just check to make sure the name is correct.
|
- 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.
|
- 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) {
|
const getAge = function (birth, death) {
|
||||||
return array.reduce((oldest, currentPerson) => {
|
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 oldestAge = getAge(oldest.yearOfBirth, oldest.yearOfDeath);
|
||||||
const currentAge = getAge(
|
const currentAge = getAge(
|
||||||
currentPerson.yearOfBirth,
|
currentPerson.yearOfBirth,
|
||||||
@@ -9,11 +16,25 @@ const findTheOldest = function (array) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const getAge = function (birth, death) {
|
/* ALTERNATIVE SOLUTION
|
||||||
if (!death) {
|
const getAge = function (person) {
|
||||||
death = new Date().getFullYear();
|
// The nullish coalescing assignment operator
|
||||||
}
|
// only does the assignment if the left side is "nullish" (evaluates to undefined or null)
|
||||||
return death - birth;
|
// 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;
|
module.exports = findTheOldest;
|
||||||
|
|||||||
Reference in New Issue
Block a user