Maison >interface Web >js tutoriel >Comment additionner efficacement les valeurs des clés en double dans un tableau d'objets JavaScript ?

Comment additionner efficacement les valeurs des clés en double dans un tableau d'objets JavaScript ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-20 01:32:09999parcourir

How to Efficiently Sum Values of Duplicate Keys in a JavaScript Array of Objects?

Somme des valeurs de clés en double dans un tableau d'objets

En JavaScript, lorsqu'on traite un tableau d'objets, on peut rencontrer le besoin pour fusionner les clés en double et additionner leurs valeurs associées. Étant donné un tableau d'objets comme :

objArr = [
    {key: "Mon Sep 23 2013 00:00:00 GMT-0400", val: 42},
    {key: "Mon Sep 24 2013 00:00:00 GMT-0400", val: 78},
    {key: "Mon Sep 25 2013 00:00:00 GMT-0400", val: 23},
    {key: "Mon Sep 23 2013 00:00:00 GMT-0400", val: 54} // duplicate key
]

On viserait à atteindre ce qui suit :

reducedObjArr = [
    {key: "Mon Sep 23 2013 00:00:00 GMT-0400", val: 96},
    {key: "Mon Sep 24 2013 00:00:00 GMT-0400", val: 78},
    {key: "Mon Sep 25 2013 00:00:00 GMT-0400", val: 23}
]

Au lieu d'itérer et de pousser des valeurs, une approche plus efficace utilise Map et Reduction :

let counts = objArr.reduce((prev, curr) => {
  let count = prev.get(curr.key) || 0;
  prev.set(curr.key, curr.val + count);
  return prev;
}, new Map());

Cela crée une carte avec des clés comme clés d'objet et des valeurs comme valeurs additionnées. Enfin, la carte est reconvertie en tableau avec :

let reducedObjArr = [...counts].map(([_, value]) => {
  return {key, value}
})

Cette approche est plus concise et élimine le risque d'erreurs associé à l'itération manuelle.

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