Heim > Web-Frontend > js-Tutorial > Wie kann ich Arrays von Objekten in JavaScript effizient gruppieren?

Wie kann ich Arrays von Objekten in JavaScript effizient gruppieren?

Linda Hamilton
Freigeben: 2024-12-21 14:44:10
Original
154 Leute haben es durchsucht

How Can I Efficiently Group Arrays of Objects in JavaScript?

GroupBy-Optimierung für Array-Objekte

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;
  }, {});
};
Nach dem Login kopieren

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);
Nach dem Login kopieren

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" }
    ]
  }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage