„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie gruppiere ich Objekte nach mehreren Eigenschaften und aggregiere Werte in JavaScript?

Wie gruppiere ich Objekte nach mehreren Eigenschaften und aggregiere Werte in JavaScript?

Veröffentlicht am 25.12.2024
Durchsuche:360

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

Gruppieren von Objekten nach mehreren Eigenschaften und Aggregieren von Werten

Bei der Aufgabe, Objekte in einem Array nach mehreren Eigenschaften zu gruppieren, besteht eine häufige Anforderung darin Sie können nicht nur nach diesen Eigenschaften gruppieren, sondern auch die Werte bestimmter Objekteigenschaften zusammenfassen. Eine Lösung, die einfach alle Duplikate in einem zweidimensionalen Array verschachtelt, reicht jedoch nicht aus.

Problemstellung

Betrachten Sie ein Array von Objekten, die nach Form und gruppiert werden müssen Farbe. Objekte in diesem Array gelten nur dann als Duplikate, wenn sowohl ihre Form als auch ihre Farbe gleich sind. Für doppelte Objekte müssen wir deren verwendete Werte und Instanzwerte zusammenfassen und die Duplikate entfernen, was zu einer übersichtlichen Liste von Objekten mit eindeutigen Formen und Farben führt.

Lösung

Um dieses Problem effektiv zu lösen, können wir die Array#reduce-Methode in Verbindung mit einem Hilfsobjekt nutzen, das gefundene Form- und Farbkombinationen verfolgt:

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);

Ausgabe:

[
  { 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 }
]

Diese Lösung gruppiert die Objekte effizient nach Form und Farbe, aggregiert ihre verwendeten und Instanzwerte für doppelte Objekte und entfernt alle verbleibenden Duplikate, was zur gewünschten Ausgabe führt.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3