Effiziente Objektgruppierung mit mehreren Eigenschaften in Arrays
Die Aufgabe, Objekte in Arrays zu gruppieren, kann über eine einzelne Eigenschaft hinausgehen; In bestimmten Fällen müssen mehrere Eigenschaften für die Gruppierung berücksichtigt werden. In diesem Szenario ist ein individueller Ansatz erforderlich.
Lassen Sie uns das Problem der Gruppierung von Objekten nach Form und Farbe angehen. Das Ziel besteht darin, Objekte mit identischer Form und Farbe zu gruppieren und gleichzeitig ihre Verwendungs- und Instanzwerte zusammenzufassen.
Erwartetes Verhalten:
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 expectedResult = [ { 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 } ];
Wichtige Überlegungen :
Lösung:
Mit Array#reduce können wir Durchlaufen Sie das Array und behalten Sie dabei ein Hilfsobjekt bei, um Form-Farb-Kombinationen zu verfolgen.
Für jedes Objekt:
Wenn der Schlüssel nicht im Hilfsobjekt gefunden wird:
Wenn sich der Schlüssel bereits im Hilfsobjekt befindet:
Dieser Prozess Gruppiert effektiv Objekte mit identischer Form und Farbe und akkumuliert gleichzeitig ihre Werte.
Code-Snippet:
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 } ]; let helper = {}; const result = arr.reduce((r, o) => { const key = `${o.shape}-${o.color}`; if (!helper[key]) { helper[key] = Object.assign({}, o); r.push(helper[key]); } else { helper[key].used += o.used; helper[key].instances += o.instances; } return r; }, []); console.log(result);
Die Ausgabe ist durchweg korrekt und entspricht dem erwarteten Ergebnis:
[ { 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 } ]
Durch die Verwendung dieser Technik können Sie Werte basierend auf mehreren Eigenschaften effizient gruppieren und zusammenfassen und so komplexe Datenmanipulationsaufgaben bewältigen Arrays.
Das obige ist der detaillierte Inhalt vonWie gruppiert man Objekte in einem Array effizient nach mehreren Eigenschaften und fasst ihre Werte zusammen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!