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!