Bei der Arbeit mit Arrays von Objekten ist es häufig erforderlich, diese für die Analyse effizient zu gruppieren. Hier ist eine Diskussion über den effektivsten Ansatz, um dies zu erreichen.
Verwendung einer externen Bibliothek:
Underscore.js bietet eine praktische GroupBy-Funktion, die die Gruppierung nach bestimmten Schlüsselwerten vereinfacht . Es wird jedoch möglicherweise nicht vollständig auf die Notwendigkeit eingegangen, Gruppen zusammenzuführen, anstatt sie aufzuteilen.
Implementieren einer benutzerdefinierten GroupBy-Funktion:
Um eine präzise Kontrolle über Gruppierung und Aggregation zu erreichen, Erwägen Sie die Implementierung einer benutzerdefinierten Funktion. Hier ist eine Vanilla-JavaScript-Implementierung:
var groupBy = function(xs, key) { return xs.reduce(function(rv, x) { (rv[x[key]] = rv[x[key]] || []).push(x); return rv; }, {}); };
Beispiel:
Lassen Sie uns diese benutzerdefinierte groupBy-Funktion auf das Beispielarray anwenden:
var data = [ { 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" } ]; var groupedByPhase = groupBy(data, "Phase"); var groupedByPhaseAndStep = groupBy(data, "Phase", "Step"); console.log(groupedByPhase); console.log(groupedByPhaseAndStep);
Ausgabe:
{ "Phase 1": [ { 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 2": [ { 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" } ] } { "Phase 1": { "Step 1": [ { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" }, { Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" } ], "Step 2": [ { Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "15" }, { Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20" } ] }, "Phase 2": { "Step 1": [ { Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "25" }, { Phase: "Phase 2", Step: "Step 1", Task: "Task 2", Value: "30" } ], "Step 2": [ { Phase: "Phase 2", Step: "Step 2", Task: "Task 1", Value: "35" }, { Phase: "Phase 2", Step: "Step 2", Task: "Task 2", Value: "40" } ] } }
Wie Sie sehen können, die Ergebnisse Richten Sie sich nach dem erwarteten Format aus und gruppieren Sie Objekte basierend auf den angegebenen Schlüsseln, während Sie sie zusammenführen, anstatt sie aufzuteilen.
Zusammenfassend lässt sich sagen, dass diese benutzerdefinierte Implementierung von groupBy effiziente Gruppierungsfunktionen für Arrays von Objekten bietet und die gewünschten Ziele erfüllt Aggregationsfunktion.
Das obige ist der detaillierte Inhalt vonWie kann ich Arrays von Objekten in JavaScript effizient gruppieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!