JavaScript数组过滤:如何实现带日期例外条件的元素筛选?
修正筛选逻辑
现有代码
payload: data.filter((item) => !isNullOrUndefined(item?.process_detail) && !isEqual(item?.process_detail?.status, EVENT_STATE_KEYS.doesNotApply)), }); });
需求说明
仅当元素的start_date已过期时,才过滤掉process_detail为null或undefined的项;若为未来进程,即使process_detail为空也需保留。但现有代码会错误过滤掉这类未来进程。
数据格式示例:
{ "id": 459, "name": "Future process test", "date": "2022-11-22T00:00:00.000Z", "type": "PotentialProcess", "min_worked_days": 0, "reminder_days": 0, "start_date": "2022-10-22T00:00:00.000Z", "process_detail": null, "follow_up_process_id": null, "audience_id": 81, }
修正后的代码
payload: data.filter((item) => { // 判断进程是否已过期 const isProcessExpired = new Date(item.start_date) < new Date(); // 核心筛选逻辑 return !isEqual(item?.process_detail?.status, EVENT_STATE_KEYS.doesNotApply) && (!isProcessExpired || !isNullOrUndefined(item?.process_detail)); }), });
逻辑解释
- 统一过滤掉
process_detail状态为EVENT_STATE_KEYS.doesNotApply的项(无论进程是否过期) - 未过期进程:只要状态不符合
doesNotApply,无论process_detail是否为空都保留 - 已过期进程:必须同时满足
process_detail不为空、状态不符合doesNotApply才保留
内容的提问来源于stack exchange,提问作者Lautaro Graciani
相关产品推荐
相关产品推荐

