如何在给定日期之前检索数组中最近的对象



我有一个简单的、未排序的对象数组:

const items = [
{ item: 'Two', date: '2018-01-01' },
{ item: 'Three', date: '2019-01-01' },
{ item: 'One', date: '2022-01-01' },
{ item: 'Four', date: '2021-01-01' },
];

我正在尝试构建一个函数,该函数使用单个effDate参数并返回最近的item,其date属性在effDate之前。

例如,如果我将2020-08-22作为参数传递,那么函数将返回项Three,因为它最接近effDate,而不需要遍历。

我尝试过使用reducer,但我确信我做得不对,因为它总是返回数组中的第一个对象:

const getItem = (effDate) => {
return items.reduce((prev, next) => {
return next.date > prev.date && next.date < effDate.date
? next
: prev;
});
};

那么,如果不自己构建一个完整的循环/比较函数,使用内置的JS工具,这可能吗?

正如@Barmar在评论中所说:

按日期对数组进行反向排序。然后使用find((查找第一个effData之前的元素。

  1. 按降序对日期排序
  2. 查找最接近日期effDate的

const items = [{ item: 'Two', date: '2018-01-01' }, { item: 'Three', date: '2019-01-01' }, { item: 'One', date: '2022-01-01' }, { item: 'Four', date: '2021-01-01' }, ];
const getItem = (effDate) => {
//1.
let itemsSorted = items.slice().sort((a, b) => Date.parse(b.date) - Date.parse(a.date))
//2. 
return itemsSorted.find(item => Date.parse(item.date) < Date.parse(effDate));
};
console.log(getItem('2020-08-22'));

最新更新