Le moyen le plus efficace de regrouper des tableaux d'objets
P粉310754094
2023-08-21 14:34:06
<p>Quel est le moyen le plus efficace de regrouper des objets dans un tableau ? </p>
<p>Par exemple, étant donné le tableau d'objets suivant : </p>
<pre class="brush:php;toolbar:false;">[
{ Phase : "Phase 1", Étape : "Étape 1", Tâche : "Tâche 1", Valeur : "5" },
{ Phase : "Phase 1", Étape : "Étape 1", Tâche : "Tâche 2", Valeur : "10" },
{ Phase : "Phase 1", Étape : "Étape 2", Tâche : "Tâche 1", Valeur : "15" },
{ Phase : "Phase 1", Étape : "Étape 2", Tâche : "Tâche 2", Valeur : "20" },
{ Phase : "Phase 2", Étape : "Étape 1", Tâche : "Tâche 1", Valeur : "25" },
{ Phase : "Phase 2", Étape : "Étape 1", Tâche : "Tâche 2", Valeur : "30" },
{ Phase : "Phase 2", Étape : "Étape 2", Tâche : "Tâche 1", Valeur : "35" },
{ Phase : "Phase 2", Étape : "Étape 2", Tâche : "Tâche 2", Valeur : "40" }
]≪/pré>
<p>J'affiche ces informations dans un tableau. Je veux regrouper par différentes méthodes mais je veux additionner les valeurs. </p>
<p>J'utilise la fonction groupby d'Underscore.js, qui est utile, mais ne satisfait pas tout à fait le besoin car je ne veux pas les "séparer" mais les "fusionner", plus comme le group by de SQL méthode. </p>
<p>Ce que je veux, c'est pouvoir additionner des valeurs spécifiques si nécessaire. </p>
<p>Donc, si je regroupe par <code>Phase</code>, je veux obtenir : </p>
<pre class="brush:php;toolbar:false;">[
{ Phase : "Phase 1", Valeur : 50 },
{ Phase : "Phase 2", Valeur : 130 }
]≪/pré>
<p>Si je regroupe par <code>Phase</code> / <code>Step</code>, je souhaite obtenir : </p>
<pre class="brush:php;toolbar:false;">[
{ Phase : "Phase 1", Étape : "Étape 1", Valeur : 15 },
{ Phase : "Phase 1", Étape : "Étape 2", Valeur : 35 },
{ Phase : "Phase 2", Étape : "Étape 1", Valeur : 55 },
{ Phase : "Phase 2", Étape : "Étape 2", Valeur : 75 }
]≪/pré>
<p>Existe-t-il un script utile pour y parvenir, ou dois-je simplement continuer à utiliser Underscore.js et faire la somme en parcourant les objets de résultat ? </p>
Utilisation de l'objet Map ES6 :
À propos de la carte : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
Si vous souhaitez éviter d'utiliser des bibliothèques externes, vous pouvez simplement implémenter une version native
groupBy()
comme ceci :