J'ai une liste d'objets comme suit :
const utilisationCosts = { 224910186407 : { ID de l'appareil : "224910186407", devise : "GBP", Utilisation annuelle : 1480,81 }, 224910464538 : { ID de l'appareil : "224910464538", devise : "GBP", Utilisation annuelle : 617,36 }, 224910464577 : { ID de l'appareil : "224910464577", devise : "EUR", Utilisation annuelle : 522,3 } }Je fais une somme par devise, comme ceci :
const totalYearlyCost = Object.values(usageCosts).reduce( (acc : { [clé : chaîne] : n'importe quel }, stat : n'importe quel) => if (stat.currency && !acc[stat.currency]) { acc[stat.devise] = 0 } retour { ...acc, [stat.currency!] : acc[stat.currency!] + stat.yearlyUsage, } }, {}, )Il renvoie un objet comme suit :
{ EUR : 522,3 GBP : 2 098,17 }Je souhaite également renvoyer le nombre total d'appareils par devise, quelque chose comme :
{ EUR : 522,3 (1 appareil) GBP : 2 098,17 (2 appareils) }J'ai essayé d'ajouter une autre boucle, mais les résultats n'étaient pas ceux attendus.
Cette tâche sera plus facile si elle est divisée en deux parties.
Tout d'abord, convertissez-le
reduce
en un tableau contenant les valeurs groupées.Ensuite, bouclez (vous pouvez également utiliser réduire) l'objet etobtenez la sommedu tableau et ajoutez
${array.length} devices
à la chaîne :