I am working through the array cardio challenge from Wes Bos Javascript 30 and am struggling to understand the behaviour of the sort() functions when run together or sequentially.
We start with an array of inventor objects and the initial challenge is to sort by birthdate.
The initial function (orderBirth) works as planned and returns the array sorted as expected.
Then we write another function (oldest) to sort the inventors array by age of inventor. This again works as expected.
However, if I re-run the console.log(orderBirth) it returns the array sorted by age rather than birthdate.
I understand that the sort function changes the original array (mutates it) but I can't understand why that would prevent the orderBirth function working correctly when run a second time.
const inventors = [
{ first: 'Albert', last: 'Einstein', year: 1879, passed: 1955 },
{ first: 'Isaac', last: 'Newton', year: 1643, passed: 1727 },
{ first: 'Galileo', last: 'Galilei', year: 1564, passed: 1642 },
{ first: 'Marie', last: 'Curie', year: 1867, passed: 1934 },
{ first: 'Johannes', last: 'Kepler', year: 1571, passed: 1630 },
{ first: 'Nicolaus', last: 'Copernicus', year: 1473, passed: 1543 },
{ first: 'Max', last: 'Planck', year: 1858, passed: 1947 },
{ first: 'Katherine', last: 'Blodgett', year: 1898, passed: 1979 },
{ first: 'Ada', last: 'Lovelace', year: 1815, passed: 1852 },
{ first: 'Sarah E.', last: 'Goode', year: 1855, passed: 1905 },
{ first: 'Lise', last: 'Meitner', year: 1878, passed: 1968 },
{ first: 'Hanna', last: 'Hammarström', year: 1829, passed: 1909 }
];
const orderBirth = inventors.sort((a, b) => a.year > b.year ? 1 : -1);
console.log('Ordered by birthdate table')
console.log(orderBirth)
const oldest = inventors.sort((a, b) => {
const lastInventor = a.passed - a.year;
const nextInventor = b.passed - b.year;
return lastInventor > nextInventor ? -1 : 1;
});
console.log('Ordered by age')
console.log(oldest);
console.log('Re-running orderBirth gives unexpected result')
console.log(orderBirth)
I have read the post does-sort-function-change-original-array but while this explains the in place mutation of the sort function, it doesn't answer my question. Or at least it doesn't answer it with my current level of JS understanding.