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; }, {}); };
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) ]
Le regroupement par phase donne :
console.log(groupBy(array, "Phase")); // => { // "Phase 1": [ // // Objects in Phase 1 // ], // "Phase 2": [ // // Objects in Phase 2 // ] // }
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 // } // }
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!