如何从对象数组中获取晚于今日的最近日期对象
解决方法
首先要明确:Array.some() 方法的作用是判断数组中是否存在符合条件的元素,返回的是布尔值,没法直接帮你找到目标对象。要实现需求,你可以按以下步骤操作:
步骤1:过滤出日期符合要求的对象
先筛选出所有 PartialRedemptionDate 晚于当前日期的对象:
const now = new Date(); const validItems = poc.filter(item => new Date(item.PartialRedemptionDate) > now);
步骤2:从筛选结果中找出最近日期的对象
如果筛选后有有效数据,就通过比较日期找出离当前最近的那个;如果没有符合条件的对象,可返回 null 或其他默认值:
let closestDay = null; if (validItems.length > 0) { closestDay = validItems.reduce((prev, curr) => { const prevDate = new Date(prev.PartialRedemptionDate); const currDate = new Date(curr.PartialRedemptionDate); // 保留更早的日期(即离当前最近的) return currDate < prevDate ? curr : prev; }); }
完整代码
把两步整合后的完整代码如下:
const poc = [ { PartialRedemptionAmount: 2880000, PartialRedemptionDate: '2022-10-01T00:00:00Z', PartialRedemptionPrice: 100, PartialRedemptionType: 'UnscheduledRedemption', }, { PartialRedemptionAmount: 2880000, PartialRedemptionDate: '2023-03-03T00:00:00Z', PartialRedemptionPrice: 100, PartialRedemptionType: 'UnscheduledRedemption', }, { PartialRedemptionAmount: 2880000, PartialRedemptionDate: '2023-03-09T00:00:00Z', PartialRedemptionPrice: 100, PartialRedemptionType: 'UnscheduledRedemption', }, ]; const now = new Date(); const validItems = poc.filter(item => new Date(item.PartialRedemptionDate) > now); let closestDay = null; if (validItems.length > 0) { closestDay = validItems.reduce((prev, curr) => { const prevDate = new Date(prev.PartialRedemptionDate); const currDate = new Date(curr.PartialRedemptionDate); return currDate < prevDate ? curr : prev; }); } console.log(closestDay);
补充说明
filter方法负责缩小范围,只保留日期晚于当前时间的对象,避免无效比较。reduce方法遍历有效数组,每次对比两个元素的日期,最终保留离当前最近的那个对象。- 若没有符合条件的对象,
closestDay会保持为null,你可以根据业务需求调整默认返回值。
内容的提问来源于stack exchange,提问作者chewie
相关产品推荐
相关产品推荐

