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 à deux dimensions est insuffisante.
Énoncé du problème
Considérons 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 d'assistance qui suit les combinaisons de formes et de couleurs rencontrées :
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é.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3