Heim  >  Artikel  >  Web-Frontend  >  Wie gruppiere ich Objekte nach mehreren Eigenschaften und aggregiere Werte in JavaScript?

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-09 06:07:02963Durchsuche

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

Objekte nach mehreren Eigenschaften gruppieren und Werte aggregieren

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 Gebrauchs- 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 die gefundene Form und Farbe verfolgt Kombinationen:

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 und führt zur gewünschten Ausgabe.

Das obige ist der detaillierte Inhalt vonWie gruppiere ich Objekte nach mehreren Eigenschaften und aggregiere Werte in JavaScript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn