我有一个简单的、未排序的对象数组:
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之前的元素。
- 按降序对日期排序
- 查找最接近日期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'));