Compter le nombre d'interactions pour chaque opération de réduction
P粉191323236
2023-08-14 17:21:30
<p>J'ai une liste d'objets comme suit :</p>
<pre class="brush:php;toolbar:false;">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
}
}</pré>
<p>Je fais une somme par devise, comme ceci : </p>
<pre class="brush:php;toolbar:false;">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,
}
},
{},
)</pré>
<p>Il renvoie un objet comme suit : </p>
<pre class="brush:php;toolbar:false;">{
EUR : 522,3
GBP : 2 098,17
}</pré>
<p>Je souhaite également renvoyer le nombre total d'appareils par devise, quelque chose comme : </p>
<pre class="brush:php;toolbar:false;">{
EUR : 522,3 (1 appareil)
GBP : 2 098,17 (2 appareils)
}</pré>
<p>J'ai essayé d'ajouter une autre boucle, mais les résultats n'étaient pas ceux attendus. </p>
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 et obtenez la somme du tableau et ajoutez
${array.length} devices
à la chaîne :