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
相关产品推荐
相关产品推荐

