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

如何按SessionID分组获取首尾元素并计算时间差生成目标数组

嘿,我来帮你搞定这个问题!你的需求是按SessionID分组,算出每组首尾记录的时间差,然后转换成指定格式的数组对吧?之前的代码只存了索引没处理时间计算,所以没达到预期效果,我给你一个可行的解决方案:

核心思路

  1. 先按SessionID对原数组进行分组,每个分组里保存对应的Name和所有记录的时间(转换成Date对象方便计算)
  2. 对每个分组,取首尾两个时间计算差值,转换成分钟数(和你示例里的结果一致)
  3. 把每个分组的结果整理成你需要的{Name, Time}结构,最终组成新数组

完整代码实现

var arr = [
 { createdAt: '2020-02-08 17:30:46.367 +00:00', SessionID: 10, Name: 'Name1' },
 { createdAt: '2020-02-08 17:40:47.465 +00:00', SessionID: 10, Name: 'Name1' },
 { createdAt: '2020-02-08 17:45:48.596 +00:00', SessionID: 10, Name: 'Name1' },
 { createdAt: '2020-02-08 17:50:49.747 +00:00', SessionID: 11, Name: 'Name2' },
 { createdAt: '2020-02-08 17:52:50.814 +00:00', SessionID: 11, Name: 'Name2' },
 { createdAt: '2020-02-08 17:54:51.918 +00:00', SessionID: 11, Name: 'Name2' }
];

// 1. 按SessionID分组,存储名称和时间
const sessionGroups = {};
arr.forEach(item => {
  const { SessionID, createdAt, Name } = item;
  // 如果当前SessionID还没创建分组,初始化结构
  if (!sessionGroups[SessionID]) {
    sessionGroups[SessionID] = {
      Name,
      times: []
    };
  }
  // 将时间字符串转为Date对象存入分组
  sessionGroups[SessionID].times.push(new Date(createdAt));
});

// 2. 计算时间差并生成目标数组
const newArr = Object.values(sessionGroups).map(group => {
  const { Name, times } = group;
  // 取分组的第一个和最后一个时间
  const firstTime = times[0];
  const lastTime = times[times.length - 1];
  // 计算时间差(毫秒转分钟,取整)
  const timeDiffMinutes = Math.round((lastTime - firstTime) / (1000 * 60));
  return { Name, Time: timeDiffMinutes };
});

console.log(newArr);
// 输出结果完全符合你的期望:
// [ { Name: 'Name1', Time: 15 }, { Name: 'Name2', Time: 4 } ]

代码解释

  • 分组阶段:不再像你之前那样存索引,而是直接把每个SessionID对应的Name和时间对象存起来,这样后续计算的时候不用再回头查原数组,效率更高。而且同一SessionID的Name是一致的,所以只需要存一次就够了。
  • 计算阶段:用Object.values(sessionGroups)拿到所有分组的数据,对每个分组取首尾时间,计算差值后转换成分钟数(1分钟=60*1000毫秒),用Math.round取整正好和你示例里的15、4分钟匹配。
  • 如果你不需要取整,直接用Math.floor或者保留小数也可以,根据需求调整就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:07:39