Der effizienteste Weg, Objektarrays zu gruppieren
P粉310754094
2023-08-21 14:34:06
<p>Wie lassen sich Objekte in einem Array am effizientesten gruppieren? </p>
<p>Zum Beispiel das folgende Array von Objekten: </p>
<pre class="brush:php;toolbar:false;">[
{ Phase: „Phase 1“, Schritt: „Schritt 1“, Aufgabe: „Aufgabe 1“, Wert: „5“ },
{ Phase: „Phase 1“, Schritt: „Schritt 1“, Aufgabe: „Aufgabe 2“, Wert: „10“ },
{ Phase: „Phase 1“, Schritt: „Schritt 2“, Aufgabe: „Aufgabe 1“, Wert: „15“ },
{ Phase: „Phase 1“, Schritt: „Schritt 2“, Aufgabe: „Aufgabe 2“, Wert: „20“ },
{ Phase: „Phase 2“, Schritt: „Schritt 1“, Aufgabe: „Aufgabe 1“, Wert: „25“ },
{ Phase: „Phase 2“, Schritt: „Schritt 1“, Aufgabe: „Aufgabe 2“, Wert: „30“ },
{ Phase: „Phase 2“, Schritt: „Schritt 2“, Aufgabe: „Aufgabe 1“, Wert: „35“ },
{ Phase: „Phase 2“, Schritt: „Schritt 2“, Aufgabe: „Aufgabe 2“, Wert: „40“ }
]</pre>
<p>Ich zeige diese Informationen in einer Tabelle an. Ich möchte nach verschiedenen Methoden gruppieren, aber die Werte summieren. </p>
<p>Ich verwende die Groupby-Funktion von Underscore.js, die hilfreich ist, aber den Bedarf nicht ganz befriedigt, weil ich sie nicht „trennen“, sondern „zusammenführen“ möchte, eher wie die Gruppierung nach SQL Methode. </p>
<p>Was ich möchte, ist, bei Bedarf bestimmte Werte summieren zu können. </p>
<p>Wenn ich also nach <code>Phase</code> gruppiere, möchte ich Folgendes erhalten: </p>
<pre class="brush:php;toolbar:false;">[
{ Phase: „Phase 1“, Wert: 50 },
{ Phase: „Phase 2“, Wert: 130 }
]</pre>
<p>Wenn ich nach <code>Phase</code> / <code>Step</code> gruppiere, möchte ich Folgendes erhalten: </p>
<pre class="brush:php;toolbar:false;">[
{ Phase: „Phase 1“, Schritt: „Schritt 1“, Wert: 15 },
{ Phase: „Phase 1“, Schritt: „Schritt 2“, Wert: 35 },
{ Phase: „Phase 2“, Schritt: „Schritt 1“, Wert: 55 },
{ Phase: „Phase 2“, Schritt: „Schritt 2“, Wert: 75 }
]</pre>
<p>Gibt es ein nützliches Skript, um dies zu erreichen, oder sollte ich einfach weiterhin Underscore.js verwenden und die Summierung durch Durchlaufen der Ergebnisobjekte durchführen? </p>
使用ES6的Map对象:
关于Map: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
如果您想避免使用外部库,可以简洁地实现一个原生版本的
groupBy()
,如下所示: