Maison > interface Web > js tutoriel > Comment puis-je regrouper et agréger efficacement des objets dans un tableau selon plusieurs propriétés ?

Comment puis-je regrouper et agréger efficacement des objets dans un tableau selon plusieurs propriétés ?

Linda Hamilton
Libérer: 2024-11-14 16:06:02
original
596 Les gens l'ont consulté

How can I efficiently group and aggregate objects in an array by multiple properties?

Regrouper et agréger efficacement des objets dans un tableau par plusieurs propriétés

Dans cet article, nous abordons une tâche critique : regrouper des objets dans un tableau par plusieurs propriétés et en agrégeant leurs valeurs.

Le Défi

Regrouper des objets dans des tableaux en fonction de plusieurs critères peut être un problème déroutant. Bien que les solutions existantes puissent regrouper les objets selon plusieurs clés, elles ne parviennent souvent pas à combiner et à éliminer efficacement les doublons. Notre objectif est de créer une solution qui regroupe de manière transparente les objets par forme et couleur, additionne leurs valeurs respectives « utilisées » et « instances » et élimine les doublons.

La solution

Notre approche utilise la méthode array.reduce() en conjonction avec un objet assistant. Pour chaque objet du tableau, nous construisons une clé unique en concaténant sa forme et sa couleur. On vérifie ensuite si cette clé existe dans notre objet helper :

  1. Si la clé existe, on incrémente simplement les valeurs 'used' et 'instances' de l'objet correspondant dans l'helper.
  2. Si la clé n'existe pas, nous créons un nouvel objet avec une copie de l'original et l'ajoutons à l'objet assistant en utilisant Object.assign(). Nous poussons également cet objet dans le tableau de résultats.

En utilisant un objet d'assistance pour suivre les combinaisons uniques de forme et de couleur, nous regroupons et agrégeons efficacement les objets tout en éliminant les doublons.

var 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}
];

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;
}, []);

console.log(result);
Copier après la connexion

Le résultat

En mettant en œuvre cette solution, nous obtenons le résultat souhaité résultat :

[{"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

Cela regroupe efficacement les objets par forme et couleur, résume leurs valeurs et supprime les doublons.

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