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

TypeScript中如何分组求和:获取唯一用户名及总时长

用TypeScript汇总用户名的总时长

嘿,这个需求其实挺常见的!TypeScript里虽然没有像C#那样专门的Dictionary<string, int>,但咱们有两个超好用的替代方案——普通对象或者Map,都能轻松实现按用户名汇总总时长的功能,我给你详细讲讲:

方法一:用普通对象实现

这是最直观的方式,把用户名作为对象的键,总时长作为对应的值:

let json = [
  {"User":"Tom Smith","Hours": 6},
  {"User":"Mark Zuckerberg","Hours": 8},
  {"User":"Elon Musk","Hours": 12},
  {"User":"Tom Smith","Hours": 1}
];

// 初始化一个空对象来存汇总结果
const userHours: {[key: string]: number} = {};

// 遍历原始数组,累加时长
json.forEach(item => {
  const userName = item.User;
  const hours = item.Hours;
  
  if (userHours[userName]) {
    // 如果用户已存在,累加时长
    userHours[userName] += hours;
  } else {
    // 如果用户不存在,初始化时长
    userHours[userName] = hours;
  }
});

console.log(userHours);
// 输出:{ "Tom Smith": 7, "Mark Zuckerberg": 8, "Elon Musk": 12 }

方法二:用Map实现

如果你的用户名可能包含特殊字符(比如空格、符号),用Map会更稳妥,它对键的支持比普通对象更灵活:

let json = [
  {"User":"Tom Smith","Hours": 6},
  {"User":"Mark Zuckerberg","Hours": 8},
  {"User":"Elon Musk","Hours": 12},
  {"User":"Tom Smith","Hours": 1}
];

// 初始化一个Map,键是用户名(字符串),值是总时长(数字)
const userHoursMap = new Map<string, number>();

// 遍历数组处理
json.forEach(item => {
  const userName = item.User;
  const hours = item.Hours;
  
  if (userHoursMap.has(userName)) {
    // 存在则累加
    userHoursMap.set(userName, userHoursMap.get(userName)! + hours);
  } else {
    // 不存在则添加
    userHoursMap.set(userName, hours);
  }
});

// 如果需要转换成对象格式,可以用Object.fromEntries
const userHoursObj = Object.fromEntries(userHoursMap);
console.log(userHoursObj);
// 输出和上面一样:{ "Tom Smith": 7, "Mark Zuckerberg": 8, "Elon Musk": 12 }

两种方法都能完美解决你的问题,要是你已经有了唯一用户名的数组,其实也可以基于那个数组去遍历原始数据累加,但直接遍历原始数组一次就能完成汇总,效率会更高哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:56:34