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.
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