Maison >interface Web >js tutoriel >Comment regrouper des objets par plusieurs propriétés et agréger des valeurs en JavaScript ?

Comment regrouper des objets par plusieurs propriétés et agréger des valeurs en JavaScript ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-09 06:07:021039parcourir

How to Group Objects by Multiple Properties and Aggregate Values in JavaScript?

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!

Déclaration:
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