You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从含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));

逻辑说明

  1. 初始化结果数组intervals,标记变量inZeroSegment(是否处于连续0片段)和fromDate(区间起始日期)
  2. 遍历输入数组:
    • 当遇到第一个score_value为0且未处于片段中时,标记进入片段,并记录前一个元素的date作为fromDate
    • 当遇到score_value不为0且处于片段中时,标记离开片段,将fromDate和当前元素的date组成区间加入结果数组
  3. 返回结果数组

内容的提问来源于stack exchange,提问作者Er. IT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 20:24:52