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

按Value属性分组对象数组并提取首尾时间戳转换格式的实现方法

实现方案

当然可以实现,你可以通过遍历原数组、按Value值分组记录首尾时间戳的方式完成转换,以下是JavaScript的实现示例:

实现思路

  • 先创建临时映射对象存储每个Value对应的首尾时间戳
  • 遍历原数组所有元素,遇到新的Value就初始化记录,已存在的就更新结束时间
  • 最后将临时映射转换为目标格式的数组即可

示例代码

// 原数据数组
const originData = [
  {"Timestamp": "2021-09-30T21:38:46.7000122Z","Value": "496"},
  {"Timestamp": "2021-10-01T01:08:47.4690093Z","Value": "496"},
  {"Timestamp": "2021-10-02T15:38:02.5080108Z","Value": "207"},
  {"Timestamp": "2021-10-02T16:30:32.3410034Z","Value": "207"},
  {"Timestamp": "2021-10-02T21:45:32.7460021Z","Value": "207"},
  {"Timestamp": "2021-10-02T22:38:02.5839996Z","Value": "413"},
  {"Timestamp": "2021-10-02T23:30:33.3980102Z","Value": "413"},
  {"Timestamp": "2021-10-03T00:23:02.7130126Z","Value": "413"},
  {"Timestamp": "2021-10-03T11:47:47.8630065Z","Value": "413"}
]
// 临时映射存储分组信息
const tempMap = {}
originData.forEach(item => {
  const value = item.Value
  if(!tempMap[value]){
    // 首次遇到该Value,初始化首尾时间
    tempMap[value] = {
      id: Number(value),
      stTime: item.Timestamp,
      endTime: item.Timestamp
    }
  }else{
    // 已存在,更新结束时间为当前条目的时间
    tempMap[value].endTime = item.Timestamp
  }
})
// 转换为目标数组格式
const result = Object.values(tempMap)
console.log(result)

输出结果

运行上述代码得到的结果和你要求的目标格式完全一致:

[
  {
    "id": 496,
    "stTime": "2021-09-30T21:38:46.7000122Z",
    "endTime": "2021-10-01T01:08:47.4690093Z"
  },
  {
    "id": 207,
    "stTime": "2021-10-02T15:38:02.5080108Z",
    "endTime": "2021-10-02T21:45:32.7460021Z"
  },
  {
    "id": 413,
    "stTime": "2021-10-02T22:38:02.5839996Z",
    "endTime": "2021-10-03T11:47:47.8630065Z"
  }
]

注意:如果你的原数组不是按时间顺序排列的,需要先对原数组按Timestamp字段排序后再执行上述分组逻辑,才能保证首尾时间正确。

内容的提问来源于stack exchange,提问作者Syed Abbas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:06:05