Maison > interface Web > js tutoriel > Comment regrouper les objets JavaScript selon plusieurs propriétés et additionner leurs valeurs ?

Comment regrouper les objets JavaScript selon plusieurs propriétés et additionner leurs valeurs ?

Mary-Kate Olsen
Libérer: 2024-11-11 03:30:03
original
233 Les gens l'ont consulté

How do you group JavaScript objects by multiple properties and sum their values?

Regrouper des objets par plusieurs propriétés et additionner leurs valeurs

En JavaScript, il est courant de travailler avec des tableaux d'objets. Parfois, il est nécessaire de regrouper ces objets selon plusieurs propriétés tout en effectuant des calculs sur leurs valeurs, par exemple en résumant des propriétés spécifiques.

Aperçu du problème

Étant donné un tableau d'objets , nous visons à les regrouper en fonction de deux propriétés (forme et couleur). Cependant, nous souhaitons traiter les objets comme des doublons uniquement si leur forme et leur couleur correspondent. L'objectif est de résumer les propriétés utilisées et d'instances des objets au sein de chaque groupe et de supprimer tous les doublons.

Résultat attendu

En utilisant l'exemple de tableau suivant :

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}
];
Copier après la connexion

Nous espérons obtenir un tableau avec quatre groupes :

[{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}]
Copier après la connexion

Solution utilisant Array#reduce et Object#assign

Pour y parvenir, nous pouvons utiliser la méthode Array#reduce de JavaScript pour parcourir le tableau d'objets. Pour chaque objet, nous construisons une clé unique en concaténant les propriétés de forme et de couleur. Nous utilisons ensuite un objet auxiliaire, helper, pour garder une trace des objets regroupés.

var helper = {};
var result = arr.reduce(function(r, o) {
  var key = o.shape + '-' + o.color;

  if(!helper[key]) {
    helper[key] = Object.assign({}, o); // create a copy of o
    r.push(helper[key]);
  } else {
    helper[key].used += o.used;
    helper[key].instances += o.instances;
  }

  return r;
}, []);
Copier après la connexion

Si la clé n'existe pas dans l'objet helper, nous ajoutons une nouvelle entrée en utilisant Object.assign() pour créer une nouvelle copie de l'objet actuel. Nous poussons ensuite ce nouvel objet dans le tableau de résultats.

Si la clé existe déjà dans l'assistant, cela signifie que nous avons rencontré un doublon. Dans ce cas, nous incrémentons simplement les propriétés used et instances de l'objet correspondant dans helper.

Enfin, nous renvoyons le tableau de résultats, qui regroupe efficacement les objets par forme et couleur tout en additionnant leurs valeurs.

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