JavaScript如何筛选对象数组中小于等于当前日期的条目
问题原因及修复方案
- 代码存在两个核心问题:
- 直接将字符串格式的
event_date和Date实例做比较,JS不会自动将日期字符串转为时间维度的可比较值,需要先把event_date转为Date对象再判断 - 示例数组的第二个对象末尾缺少逗号,会触发语法错误,需要先补全语法
- 直接将字符串格式的
修正后代码
const arr = [{ "id": "e18dae03-99c7-4ffa-be2f-a595fc7fad15", "event_date": "2021-09-30T01:00:00.000Z", "alert_name": null, "alert_level": null, "alert_action": null, "alert_details": null, }, { "id": "e18dae03-99c7-4ffa-be2f-a595fc7fad15", "event_date": "2021-10-30T01:00:00.000Z", "alert_name": null, "alert_level": null, "alert_action": null, "alert_details": null, }, // 补全缺失的逗号 { "id": "765a508f-fb47-4de4-bf69-19f0db38ccfc", "event_date": "2021-09-17T22:03:00.000Z", "alert_name": null, "alert_level": null, "alert_action": null, "alert_details": null, }, { "id": "bc07a114-43f4-49a1-bb6c-fec801aee749", "longitude": null, "event_date": "2021-11-19T07:51:00.000Z", "alert_name": null, "alert_level": null, "alert_action": null, "alert_details": null, } ] const filterByExpiration = () => arr.filter(({ event_date }) => new Date(event_date) <= new Date());
如果需要规避时区误差,也可以统一转成时间戳比较,写法为new Date(event_date).getTime() <= Date.now(),效果完全一致。
内容的提问来源于stack exchange,提问作者prashant padadune
相关产品推荐
相关产品推荐

