JS新手如何计算嵌套数组内对应条目的累计time总和
实现方案
可以通过一个全局累加对象记录每个crew的历史累计时长,遍历数组逐条目计算total字段即可,实现代码如下:
// 用于存储每个crew编号对应的累计time值 const crewTimeAcc = {}; // 遍历处理原始数组,返回新的结果数组,不会修改原输入数据 const processedResult = results.map(item => { // 拷贝当前条目的所有基础属性,避免修改原数据 // 如果数据包含特殊类型可替换为 structuredClone(item) const newItem = JSON.parse(JSON.stringify(item)); // 计算当前条目的total字段 newItem.total = newItem.results.map(crewRecord => { const crewId = crewRecord.crew; // 累加对应crew的时长,首次出现的crew默认初始累计值为0 crewTimeAcc[crewId] = (crewTimeAcc[crewId] || 0) + crewRecord.time; // 拷贝当前船员记录,替换time为累计值 return { ...crewRecord, time: crewTimeAcc[crewId] }; }); return newItem; });
代码说明
- 实现支持任意数量的数组条目、每个条目下任意数量的crew记录,只要crew编号唯一就能正确累加对应时长
- 若业务场景中同一个crew的
disc、speed等属性可能发生变化,以当前条目的属性为准,完全符合你给出的输出结构要求 - 若不需要保留原数组数据,也可以去掉深拷贝逻辑直接修改原数组,减少性能消耗
内容的提问来源于stack exchange,提问作者Александр Пахомов
相关产品推荐
相关产品推荐

