Maison  >  Questions et réponses  >  le corps du texte

Compter le nombre d'interactions pour chaque opération de réduction

<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>
P粉191323236P粉191323236454 Il y a quelques jours471

répondre à tous(1)je répondrai

  • P粉481815897

    P粉4818158972023-08-15 15:34:26

    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 :

    const usageCosts = {
        224910186407: {
            deviceId: "224910186407",
            currency: "GBP",
            yearlyUsage: 1480.81
        },
        224910464538: {
            deviceId: "224910464538",
            currency: "GBP",
            yearlyUsage: 617.36
        },
        224910464577: {
            deviceId: "224910464577",
            currency: "EUR",
            yearlyUsage: 522.3
        }
    }
    
    let grouped = Object.values(usageCosts).reduce((p, c) => {
        if (!p[c.currency]) p[c.currency] = [];
        p[c.currency].push(c.yearlyUsage);
        return p;
    }, {});
    
    for (var key in grouped) {
        grouped[key] = `${grouped[key].reduce((a,b)=>a+b)} (${grouped[key].length}) devices`;
    }
    
    console.log(grouped)

    répondre
    0
  • Annulerrépondre