Maison > interface Web > js tutoriel > Comment puis-je regrouper efficacement des objets dans des tableaux JavaScript à l'aide d'une fonction « groupBy » personnalisée ?

Comment puis-je regrouper efficacement des objets dans des tableaux JavaScript à l'aide d'une fonction « groupBy » personnalisée ?

DDD
Libérer: 2024-12-30 12:02:14
original
132 Les gens l'ont consulté

How Can I Efficiently Group Objects in JavaScript Arrays Using a Custom `groupBy` Function?

Regrouper efficacement des objets dans des tableaux

Les tableaux peuvent contenir des objets complexes avec plusieurs propriétés, ce qui rend nécessaire de regrouper efficacement ces objets en fonction de critères spécifiques . Underscore.js fournit une fonction groupby pratique, mais elle peut ne pas répondre à des exigences spécifiques.

Pour obtenir un regroupement de type SQL, où les valeurs sont fusionnées plutôt que divisées, une approche personnalisée est souvent préférée. Une de ces implémentations est présentée ci-dessous :

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

Cette fonction accepte un tableau xs et une clé de regroupement key. Il parcourt les éléments du tableau, les accumulant dans un objet résultat rv. Chaque groupe est identifié par la valeur de la propriété clé.

Pour démontrer, considérons le tableau d'objets suivant :

[ 
    { 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" },
    // ... (more objects)
]
Copier après la connexion

Le regroupement par phase donne :

console.log(groupBy(array, "Phase"));
// => {
//   "Phase 1": [
//     // Objects in Phase 1
//   ],
//   "Phase 2": [
//     // Objects in Phase 2
//   ]
// }
Copier après la connexion

Le regroupement par phase et étape combine des valeurs :

console.log(groupBy(array, "Phase", "Step"));
// => {
//   "Phase 1": {
//     "Step 1": [
//       // Objects in Phase 1, Step 1
//     ],
//     "Step 2": [
//       // Objects in Phase 1, Step 2
//     ]
//   },
//   "Phase 2": {
//     // Similar object structure for Phase 2
//   }
// }
Copier après la connexion

Cette approche offre un moyen flexible et efficace de regrouper des objets dans des tableaux. En implémentant une fonction groupBy personnalisée, vous prenez le contrôle de la logique de regroupement et pouvez facilement l'étendre pour gérer des scénarios plus complexes.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal