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

如何遍历含idMembers的对象数组并按唯一ID累加时长?

实现ID时长累加并转换为指定格式

原始数据

[
  { idMembers: [ '62d7001a7446ee76e5e2856f' ], hours: 5 },
  {
    idMembers: [ '62d6f80e28907a0385a3a41e', '62d7001a7446ee76e5e2856f' ],
    hours: 4
  }
]

需求说明

提取idMembers中的每个唯一ID,累加所有对象中该ID对应的时长,最终转换为[{唯一ID: 总时长}, ...]的格式。比如示例中ID 62d7001a7446ee76e5e2856f总时长为9,62d6f80e28907a0385a3a41e总时长为4。

实现方法

通过对象暂存累加结果,再转换为目标数组格式,代码如下:

const data = [
  { idMembers: [ '62d7001a7446ee76e5e2856f' ], hours: 5 },
  { idMembers: [ '62d6f80e28907a0385a3a41e', '62d7001a7446ee76e5e2856f' ], hours: 4 }
];

// 1. 用对象累加每个ID的总时长
const hourMap = {};
data.forEach(item => {
  const { idMembers, hours } = item;
  idMembers.forEach(id => {
    hourMap[id] = (hourMap[id] || 0) + hours;
  });
});

// 2. 转换为目标数组格式
const result = Object.entries(hourMap).map(([id, totalHours]) => ({ [id]: totalHours }));

console.log(result);
// 输出:
// [
//   { '62d7001a7446ee76e5e2856f': 9 },
//   { '62d6f80e28907a0385a3a41e': 4 }
// ]

逻辑说明

  • 对象暂存:用hourMap存储每个ID的累计时长,遍历原始数据时,对每个idMembers里的ID进行累加,不存在的ID初始化为0后再加当前时长。
  • 格式转换:通过Object.entries()将对象转为键值对数组,再用map()把每个键值对转换成单个对象,得到目标格式。

该方案支持后续向原始数组添加更多数据,只需重新执行上述逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:27:34