Вместо сравнения дат вы можете сравнить строки и использовать Array.sort
, чтобы упорядочить их в порядке убывания, а затем получить первый элемент:
const playerData = [
{name: "John", date: '1940-02-05' },
{name: "Bill", date: '1950-06-18' },
{name: "Bob", date: '1650-07-12' },
{name: "Jim", date: '1300-03-25' },
];
function findHighDate() {
return playerData.sort((a, b) => b.date.localeCompare(a.date))[0];
}
const highPlayer = findHighDate();
const highPlayerName = highPlayer.name;
const highPlayerIndex = playerData.indexOf(highPlayer);
const highPlayerDate = new Date(highPlayer.date);
console.log({ highPlayer, highPlayerIndex, highPlayerName, highPlayerDate });
Или вы также можете придерживаться дат и сравнивать их, используя Date.getTime()
для сортировки массива:
const playerData = [
{name: "John", date: new Date('1940-02-05') },
{name: "Bill", date: new Date('1950-06-18') },
{name: "Bob", date: new Date('1650-07-12') },
{name: "Jim", date: new Date('1300-03-25') },
];
function findHighDate() {
return playerData.sort((a, b) => b.date.getTime() - a.date.getTime())[0];
}
const highPlayer = findHighDate();
const highPlayerName = highPlayer.name;
const highPlayerIndex = playerData.indexOf(highPlayer);
const highPlayerDate = highPlayer.date;
console.log({ highPlayer, highPlayerIndex, highPlayerName, highPlayerDate });
Как отметил @Scott Sauyet в комментариях ниже, использование Array.sort
может быть излишним для вашего сценария.
Вы можете найти свою самую высокую дату снемного больше кода и помощь reduce
:
const playerData = [
{name: "John", date: new Date('1940-02-05') },
{name: "Bill", date: new Date('1950-06-18') },
{name: "Bob", date: new Date('1650-07-12') },
{name: "Jim", date: new Date('1300-03-25') },
];
function findHighDate() {
return playerData.reduce((highest, player) => {
return highest.date.getTime() > player.date.getTime() ? highest : player;
}, playerData[0]);
}
const highPlayer = findHighDate();
const highPlayerName = highPlayer.name;
const highPlayerIndex = playerData.indexOf(highPlayer);
const highPlayerDate = highPlayer.date;
console.log({ highPlayer, highPlayerIndex, highPlayerName, highPlayerDate });