Maison > interface Web > js tutoriel > Comment puis-je regrouper efficacement des tableaux d'objets en JavaScript ?

Comment puis-je regrouper efficacement des tableaux d'objets en JavaScript ?

Linda Hamilton
Libérer: 2024-12-21 14:44:10
original
153 Les gens l'ont consulté

How Can I Efficiently Group Arrays of Objects in JavaScript?

Optimisation GroupBy pour les objets de tableau

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;
  }, {});
};
Copier après la connexion

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);
Copier après la connexion

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" }
    ]
  }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal