javascript - Hur man grupperar och summerar värden i typescript


Jag försöker få unika användarnamn och deras totala tid, men vet inte hur jag ska uppnå detta. Det jag redan har gjort är en array med unika namn, men vet inte hur man får summan. Jag tror att detta borde uppnås genom att använda en struktur som en dictionary till exempel Dictionary<string,int>, men denna struktur verkar inte finnas i 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);
    }
}

Resultatet bör vara:

  • Tom Smith → 8 timmar
  • Mark Zuckerberg → 8 timmar
  • Elon Musk → 12 timmar

Svar #1

Det kallas Map:

 const usernames = new Map<string, number>();

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

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

Relaterade artiklar