如何在Typescript中进行分组并对值求和

3

我正在尝试获取唯一用户名称及其总时间,但不知道如何实现。 我已经创建了一个唯一名称的数组,但不知道如何求和。 我认为应该使用类似于字典的结构来实现这个目标。例如Dictionary<string,int>,但是在 TypeScript 中似乎不存在这种结构。

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

for(var i  = 0; i < json.length; i++)
{
    if(!userNames.find(a => a == json[i].User))
    {
        userNames.push(json[i].User);
    }
}

结果应为:

  • 汤姆·史密斯 → 8 小时
  • 马克·扎克伯格 → 8 小时
  • 伊隆·马斯克 → 12 小时
1个回答

8
它被称为Map
 const usernames = new Map<string, number>();

 for(const {User, Hours} of json) 
   usernames.set(User, (usernames.get(User) || 0) + Hours);

 console.log([...usernames]);

哇,这正是我一直在寻找的! 这个有效,但我简化了JSON结构以获得更好的可读性。 如果结构稍微复杂/嵌套呢? - tylkonachwile
没关系,我已经发现只需要在for循环中传递正确的路径即可。 再次感谢你,乔纳斯! - tylkonachwile
@tylkonachwile 很高兴能帮忙 :) - Jonas Wilms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接