Objekte nach mehreren Eigenschaften gruppieren und ihre Werte summieren
In JavaScript ist es üblich, mit Arrays von Objekten zu arbeiten. Manchmal ist es notwendig, diese Objekte nach mehreren Eigenschaften zu gruppieren, während Berechnungen für ihre Werte durchgeführt werden, z. B. das Summieren bestimmter Eigenschaften.
Problemübersicht
Gegeben ein Array von Objekten Unser Ziel ist es, sie anhand von zwei Eigenschaften (Form und Farbe) zu gruppieren. Allerdings möchten wir Objekte nur dann als Duplikate behandeln, wenn ihre Form und Farbe übereinstimmen. Das Ziel besteht darin, die verwendeten und Instanzeigenschaften von Objekten innerhalb jeder Gruppe zusammenzufassen und alle Duplikate zu entfernen.
Erwartetes Ergebnis
Verwendung des folgenden Beispielarrays:
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} ];
Wir erwarten, ein Array mit vier Gruppen zu erhalten:
[{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}]
Lösungsverwendung Array#reduce und Object#assign
Um dies zu erreichen, können wir die Array#reduce-Methode von JavaScript verwenden, um über das Array von Objekten zu iterieren. Für jedes Objekt erstellen wir einen eindeutigen Schlüssel, indem wir die Form- und Farbeigenschaften verketten. Anschließend verwenden wir ein Hilfsobjekt, einen Helfer, um den Überblick über die gruppierten Objekte zu behalten.
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; }, []);
Wenn der Schlüssel nicht im Hilfsobjekt vorhanden ist, fügen wir mithilfe von Object.assign() einen neuen Eintrag hinzu, um ihn zu erstellen eine neue Kopie des aktuellen Objekts. Anschließend verschieben wir dieses neue Objekt in das Ergebnisarray.
Wenn der Schlüssel bereits im Hilfsprogramm vorhanden ist, bedeutet dies, dass wir auf ein Duplikat gestoßen sind. In diesem Fall erhöhen wir einfach die Eigenschaften „used“ und „instances“ des entsprechenden Objekts im Hilfsprogramm.
Schließlich geben wir das Ergebnisarray zurück, das Objekte effektiv nach Form und Farbe gruppiert und gleichzeitig ihre Werte summiert.
Das obige ist der detaillierte Inhalt vonWie gruppiert man JavaScript-Objekte nach mehreren Eigenschaften und summiert ihre Werte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!