Regroupement d'objets par plusieurs propriétés et agrégation de valeurs
Dans la tâche de regroupement d'objets dans un tableau par plusieurs propriétés, une exigence courante est de non seulement regrouper par ces propriétés, mais résumer également les valeurs de certaines propriétés d'objet. Cependant, une solution qui imbrique simplement tous les doublons dans un tableau bidimensionnel est insuffisante.
Énoncé du problème
Considérez un tableau d'objets qui doivent être regroupés par forme et couleur. Les objets de ce tableau sont considérés comme des doublons uniquement si leur forme et leur couleur sont identiques. Pour les objets en double, nous devons résumer leurs valeurs utilisées et d'instances et supprimer les doublons, ce qui donne une liste concise d'objets avec des formes et des couleurs uniques.
Solution
Pour résoudre efficacement ce problème, nous pouvons exploiter la méthode Array#reduce en conjonction avec un objet assistant qui suit la forme et la couleur rencontrées. combinaisons :
const arr = [ { shape: 'square', color: 'red', used: 1, instances: 1 }, { shape: 'square', color: 'red', used: 2, instances: 1 }, { shape: 'circle', color: 'blue', used: 0, instances: 0 }, { shape: 'square', color: 'blue', used: 4, instances: 4 }, { shape: 'circle', color: 'red', used: 1, instances: 1 }, { shape: 'circle', color: 'red', used: 1, instances: 0 }, { shape: 'square', color: 'blue', used: 4, instances: 5 }, { shape: 'square', color: 'red', used: 2, instances: 1 }, ]; const helper = {}; const result = arr.reduce((r, o) => { const key = `${o.shape}-${o.color}`; if (!helper[key]) { // If it's a unique combination, add to the helper and result array helper[key] = Object.assign({}, o); r.push(helper[key]); } else { // If it's a duplicate, update the values in the helper helper[key].used += o.used; helper[key].instances += o.instances; } return r; }, []); console.log(result);
Sortie :
[ { shape: "square", color: "red", used: 5, instances: 3 }, { shape: "circle", color: "red", used: 2, instances: 1 }, { shape: "square", color: "blue", used: 11, instances: 9 }, { shape: "circle", color: "blue", used: 0, instances: 0 } ]
Cette solution regroupe efficacement les objets par forme et couleur, agrège leurs valeurs utilisées et d'instances pour les objets en double, et supprime tous les doublons restants, ce qui donne le résultat souhaité.
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!