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

JavaScript实现对象数组按用户分组合并时间字段到entries数组

解决方案

通用groupBy方法仅能完成按指定键归类元素的基础逻辑,不会自动提取公共字段、重组嵌套子数组结构,这是你得到的结果不符合预期的核心原因。直接用下面的单次遍历实现即可,时间复杂度O(n),性能最优,输出结构完全匹配要求:

const rawData = [
   {"username":"player1","nickname":"PLayer1","capturedate":"06/12/2022","capturetime":"10:05PM"},
   {"username":"player1","nickname":"PLayer1","capturedate":"06/12/2022","capturetime":"10:00PM"},
   {"username":"player1","nickname":"PLayer1","capturedate":"06/12/2022","capturetime":"10:10PM"},
   {"username":"player1","nickname":"PLayer1","capturedate":"06/12/2022","capturetime":"10:15PM"},
   {"username":"player2","nickname":"player2","capturedate":"06/12/2022","capturetime":"10:00PM"},
   {"username":"player2","nickname":"player2","capturedate":"06/12/2022","capturetime":"10:05PM"}
];

const groupMap = new Map();
for (const item of rawData) {
  if (!groupMap.has(item.username)) {
    groupMap.set(item.username, {
      username: item.username,
      nickname: item.nickname,
      entries: []
    });
  }
  groupMap.get(item.username).entries.push({
    capturedate: item.capturedate,
    capturetime: item.capturetime
  });
}

const result = Array.from(groupMap.values());

实现逻辑说明

  • 用Map做临时分组存储比普通对象查找效率更高,全程仅需遍历一次原始数组,没有额外性能损耗
  • 首次匹配到新用户时,直接留存username、nickname两个公共字段,初始化空的entries数组用于存储时间记录
  • 所有记录的时间字段只会提取capturedate、capturetime两个属性推入entries,不会产生冗余字段
  • 如果需要对entries内的时间做排序、去重,或统一修正nickname的大小写格式,在遍历完成后针对对应字段加处理逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:27:20