从含score_value的对象数组提取连续0值的起止日期区间
识别数组中连续score_value为0的片段并生成日期区间数组
需求描述
给定一个包含score_value、category、date属性的对象数组,需识别其中连续出现score_value为0的片段。每个片段对应的结果项中:
fromDate:该片段前一个对象的date值toDate:该片段后第一个对象的date值
最终生成包含这些起止日期区间的数组。
示例输入
[ { "score_value": 1, "category": "A", "date": "2023-01-01T00:00:00" }, { "score_value": 2, "category": "A", "date": "2023-02-01T00:00:00" }, { "score_value": 3, "category": "A", "date": "2023-03-01T00:00:00" }, { "score_value": 0, "category": "A", "date": "2023-04-01T00:00:00" }, { "score_value": 0, "category": "A", "date": "2023-05-01T00:00:00" }, { "score_value": 0, "category": "A", "date": "2023-06-01T00:00:00" }, { "score_value": 4, "category": "A", "date": "2023-07-01T00:00:00" }, { "score_value": 5, "category": "A", "date": "2023-08-01T00:00:00" }, { "score_value": 6, "category": "A", "date": "2023-09-01T00:00:00" }, { "score_value": 0, "category": "A", "date": "2023-10-01T00:00:00" }, { "score_value": 0, "category": "A", "date": "2023-11-01T00:00:00" }, { "score_value": 0, "category": "A", "date": "2023-12-01T00:00:00" }, { "score_value": 0, "category": "A", "date": "2024-01-01T00:00:00" }, { "score_value": 7, "category": "A", "date": "2024-02-01T00:00:00" } ]
期望输出
[{ fromDate: "2023-03-01T00:00:00", toDate: "2023-07-01T00:00:00" }, { fromDate: "2023-09-01T00:00:00", toDate: "2024-02-01T00:00:00" }]
解决方案代码
function getZeroScoreIntervals(arr) { const intervals = []; let inZeroSegment = false; let fromDate = null; for (let i = 0; i < arr.length; i++) { const current = arr[i]; // 进入连续0片段的起始点 if (current.score_value === 0 && !inZeroSegment) { inZeroSegment = true; // 确保不是数组第一个元素,取前一个元素的date if (i > 0) { fromDate = arr[i - 1].date; } } // 离开连续0片段的终点 if (current.score_value !== 0 && inZeroSegment) { inZeroSegment = false; intervals.push({ fromDate: fromDate, toDate: current.date }); } } return intervals; } // 测试示例输入 const inputArr = [ { "score_value": 1, "category": "A", "date": "2023-01-01T00:00:00" }, { "score_value": 2, "category": "A", "date": "2023-02-01T00:00:00" }, { "score_value": 3, "category": "A", "date": "2023-03-01T00:00:00" }, { "score_value": 0, "category": "A", "date": "2023-04-01T00:00:00" }, { "score_value": 0, "category": "A", "date": "2023-05-01T00:00:00" }, { "score_value": 0, "category": "A", "date": "2023-06-01T00:00:00" }, { "score_value": 4, "category": "A", "date": "2023-07-01T00:00:00" }, { "score_value": 5, "category": "A", "date": "2023-08-01T00:00:00" }, { "score_value": 6, "category": "A", "date": "2023-09-01T00:00:00" }, { "score_value": 0, "category": "A", "date": "2023-10-01T00:00:00" }, { "score_value": 0, "category": "A", "date": "2023-11-01T00:00:00" }, { "score_value": 0, "category": "A", "date": "2023-12-01T00:00:00" }, { "score_value": 0, "category": "A", "date": "2024-01-01T00:00:00" }, { "score_value": 7, "category": "A", "date": "2024-02-01T00:00:00" } ]; console.log(getZeroScoreIntervals(inputArr));
逻辑说明
- 初始化结果数组
intervals,标记变量inZeroSegment(是否处于连续0片段)和fromDate(区间起始日期) - 遍历输入数组:
- 当遇到第一个
score_value为0且未处于片段中时,标记进入片段,并记录前一个元素的date作为fromDate - 当遇到
score_value不为0且处于片段中时,标记离开片段,将fromDate和当前元素的date组成区间加入结果数组
- 当遇到第一个
- 返回结果数组
内容的提问来源于stack exchange,提问作者Er. IT
相关产品推荐
相关产品推荐

