Heim >Web-Frontend >js-Tutorial >Wie kann ich Objekte in einem Array effizient nach mehreren Eigenschaften gruppieren und aggregieren?

Wie kann ich Objekte in einem Array effizient nach mehreren Eigenschaften gruppieren und aggregieren?

Linda Hamilton
Linda HamiltonOriginal
2024-11-14 16:06:02598Durchsuche

How can I efficiently group and aggregate objects in an array by multiple properties?

Effizientes Gruppieren und Aggregieren von Objekten in einem Array nach mehreren Eigenschaften

In diesem Artikel befassen wir uns mit einer wichtigen Aufgabe: dem Gruppieren von Objekten innerhalb eines Arrays durch mehrere Eigenschaften und die Aggregation ihrer Werte.

Die Herausforderung

Das Gruppieren von Objekten in Arrays basierend auf mehreren Kriterien kann ein verwirrendes Problem sein. Während vorhandene Lösungen Objekte nach mehreren Schlüsseln gruppieren können, gelingt es ihnen oft nicht, Duplikate effektiv zu kombinieren und zu entfernen. Unser Ziel ist es, eine Lösung zu schaffen, die Objekte nahtlos nach Form und Farbe gruppiert, ihre jeweiligen „verwendeten“ und „Instanzen“-Werte summiert und Duplikate eliminiert.

Die Lösung

Unser Ansatz nutzt die Methode array.reduce() in Verbindung mit einem Hilfsobjekt. Für jedes Objekt im Array erstellen wir einen eindeutigen Schlüssel, indem wir seine Form und Farbe verketten. Anschließend prüfen wir, ob dieser Schlüssel in unserem Hilfsobjekt vorhanden ist:

  1. Wenn der Schlüssel vorhanden ist, erhöhen wir einfach die Werte „used“ und „instances“ des entsprechenden Objekts im Hilfsobjekt.
  2. Wenn der Schlüssel nicht existiert, erstellen wir ein neues Objekt mit einer Kopie des Originals und fügen es mit Object.assign() zum Hilfsobjekt hinzu. Wir verschieben dieses Objekt auch in das Ergebnisarray.

Indem wir ein Hilfsobjekt verwenden, um eindeutige Kombinationen von Form und Farbe zu verfolgen, gruppieren und aggregieren wir Objekte effektiv und eliminieren gleichzeitig Duplikate.

var 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}
];

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;
}, []);

console.log(result);

Die Ausgabe

Durch die Implementierung dieser Lösung erhalten wir das Gewünschte 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}]

Dadurch werden Objekte effektiv nach Form und Farbe gruppiert, ihre Werte zusammengefasst und Duplikate entfernt.

Das obige ist der detaillierte Inhalt vonWie kann ich Objekte in einem Array effizient nach mehreren Eigenschaften gruppieren und aggregieren?. 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