Quel est le moyen le plus efficace de regrouper des objets dans un tableau ?
Par exemple, étant donné ce tableau d'objets :
[ { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" }, { Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" }, { Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "15" }, { Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20" }, { Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "25" }, { Phase: "Phase 2", Step: "Step 1", Task: "Task 2", Value: "30" }, { Phase: "Phase 2", Step: "Step 2", Task: "Task 1", Value: "35" }, { Phase: "Phase 2", Step: "Step 2", Task: "Task 2", Value: "40" } ]
J'affiche ces informations dans un tableau. Je veux regrouper par différentes méthodes mais je veux additionner les valeurs.
J'utilise Underscore.js pour sa fonctionnalité groupby, ce qui aide beaucoup, mais ne résout pas tout le problème car je ne veux pas qu'ils se "scindent" mais "fusionnent", plus comme l'approche SQL group by
.
Je cherche à pouvoir calculer la somme de valeurs spécifiques si besoin.
Donc si je fais groupby Phase
j'attends de recevoir :
[ { Phase: "Phase 1", Value: 50 }, { Phase: "Phase 2", Value: 130 } ]
Si j'exécute groupy Phase
/ Step
/ Step
, je reçois :
[ { Phase: "Phase 1", Step: "Step 1", Value: 15 }, { Phase: "Phase 1", Step: "Step 2", Value: 35 }, { Phase: "Phase 2", Step: "Step 1", Value: 55 }, { Phase: "Phase 2", Step: "Step 2", Value: 75 } ]
Existe-t-il un script utile ou dois-je m'en tenir à Underscore.js et parcourir les objets de résultat pour calculer moi-même le total ?
Utilisez l'objet Carte 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 la version simple de
groupBy()
comme ceci :