Maison >interface Web >js tutoriel >Comment puis-je regrouper efficacement des tableaux d'objets en JavaScript ?
Lorsque vous travaillez avec des tableaux d'objets, il est souvent nécessaire de les regrouper efficacement pour l'analyse. Voici une discussion sur l'approche la plus efficace pour y parvenir.
Utilisation d'une bibliothèque externe :
Underscore.js fournit une fonction groupBy pratique qui simplifie le regroupement par valeurs clés spécifiques. . Cependant, il se peut qu'il ne réponde pas pleinement au besoin de fusionner des groupes plutôt que de les diviser.
Mise en œuvre d'une fonction GroupBy personnalisée :
Pour obtenir un contrôle précis sur le regroupement et l'agrégation, envisagez d'implémenter une fonction personnalisée. Voici une implémentation JavaScript Vanilla :
var groupBy = function(xs, key) { return xs.reduce(function(rv, x) { (rv[x[key]] = rv[x[key]] || []).push(x); return rv; }, {}); };
Exemple :
Appliquons cette fonction groupBy personnalisée à l'exemple de tableau :
var data = [ { 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" } ]; var groupedByPhase = groupBy(data, "Phase"); var groupedByPhaseAndStep = groupBy(data, "Phase", "Step"); console.log(groupedByPhase); console.log(groupedByPhaseAndStep);
Sortie :
{ "Phase 1": [ { 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 2": [ { 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" } ] } { "Phase 1": { "Step 1": [ { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" }, { Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" } ], "Step 2": [ { Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "15" }, { Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20" } ] }, "Phase 2": { "Step 1": [ { Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "25" }, { Phase: "Phase 2", Step: "Step 1", Task: "Task 2", Value: "30" } ], "Step 2": [ { Phase: "Phase 2", Step: "Step 2", Task: "Task 1", Value: "35" }, { Phase: "Phase 2", Step: "Step 2", Task: "Task 2", Value: "40" } ] } }
Comme vous pouvez le voir, le les résultats s'alignent sur le format attendu, regroupant les objets en fonction de la ou des clés spécifiées tout en les fusionnant plutôt que de les diviser.
En conclusion, cette implémentation personnalisée de groupBy fournit des capacités de regroupement efficaces pour les tableaux d'objets, remplissant les exigences fonctionnalité d'agrégation souhaitée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!