Was ist der effizienteste Weg, Objekte in einem Array zu gruppieren?
Zum Beispiel dieses Array von Objekten:
[ { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" }, { Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" }, { Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "15" }, { Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20" }, { Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "25" }, { Phase: "Phase 2", Step: "Step 1", Task: "Task 2", Value: "30" }, { Phase: "Phase 2", Step: "Step 2", Task: "Task 1", Value: "35" }, { Phase: "Phase 2", Step: "Step 2", Task: "Task 2", Value: "40" } ]
Ich zeige diese Informationen in einer Tabelle an. Ich möchte nach verschiedenen Methoden gruppieren, aber die Werte summieren.
Ich verwende Underscore.js wegen seiner Groupby-Funktionalität, was sehr hilft, aber nicht das ganze Problem löst, weil ich nicht möchte, dass sie sich „aufteilen“, sondern „zusammenführen“, eher wie der SQL-Ansatz group by
.
Ich möchte bei Bedarf die Summe bestimmter Werte berechnen können.
Wenn ich also Groupby mache Phase
, erwarte ich Folgendes:
[ { Phase: "Phase 1", Value: 50 }, { Phase: "Phase 2", Value: 130 } ]
Wenn ich Groupy Phase
/ Step
/ Step
ausführe, erhalte ich:
[ { Phase: "Phase 1", Step: "Step 1", Value: 15 }, { Phase: "Phase 1", Step: "Step 2", Value: 35 }, { Phase: "Phase 2", Step: "Step 1", Value: 55 }, { Phase: "Phase 2", Step: "Step 2", Value: 75 } ]
Gibt es ein nützliches Skript oder sollte ich bei Underscore.js bleiben und die Ergebnisobjekte durchlaufen, um die Gesamtsumme selbst zu berechnen?
使用 ES6 Map 对象:
关于地图: https://developer.mozilla.org/en-US /docs/Web/JavaScript/Reference/Global_Objects/Map
如果您想避免使用外部库,您可以简洁地实现
groupBy()
的普通版本,如下所示: