Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Object.groupBy()

Baseline
Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit März 2024 browserübergreifend verfügbar.

Hinweis: In einigen Versionen bestimmter Browser wurde diese Methode als Array.prototype.group() implementiert. Aufgrund von Problemen mit der Webkompatibilität ist sie jetzt als statische Methode implementiert. Einzelheiten finden Sie in der Tabelle zur Browser-Kompatibilität.

Die statische Methode Object.groupBy() gruppiert die Elemente eines übergebenen Iterables anhand der String-Werte, die eine bereitgestellte Callback-Funktion zurückgibt. Das zurückgegebene Objekt besitzt für jede Gruppe eine eigene Property, deren Wert ein Array mit den Elementen dieser Gruppe ist.

Diese Methode sollte verwendet werden, wenn sich die Gruppennamen als Strings darstellen lassen. Wenn Sie Elemente anhand eines beliebigen Werts als Schlüssel gruppieren müssen, verwenden Sie stattdessen Map.groupBy().

Probieren Sie es aus

const inventory = [
  { name: "asparagus", type: "vegetables", quantity: 9 },
  { name: "bananas", type: "fruit", quantity: 5 },
  { name: "goat", type: "meat", quantity: 23 },
  { name: "cherries", type: "fruit", quantity: 12 },
  { name: "fish", type: "meat", quantity: 22 },
];

const result = Object.groupBy(inventory, ({ quantity }) =>
  quantity < 6 ? "restock" : "sufficient",
);
console.log(result.restock);
// [{ name: "bananas", type: "fruit", quantity: 5 }]

Syntax

js
Object.groupBy(items, callbackFn)

Parameter

items

Ein Iterable (z. B. ein Array), dessen Elemente gruppiert werden.

callbackFn

Eine Funktion, die für jedes Element des Iterables ausgeführt wird. Sie sollte einen Wert zurückgeben, der in einen Property-Schlüssel (String oder Symbol) umgewandelt werden kann und die Gruppe des aktuellen Elements angibt. Die Funktion wird mit den folgenden Argumenten aufgerufen:

element

Das aktuell verarbeitete Element.

index

Der Index des aktuell verarbeiteten Elements.

Rückgabewert

Ein Objekt mit null-Prototyp mit Properties für alle Gruppen. Jeder Property ist ein Array mit den Elementen der jeweiligen Gruppe zugewiesen.

Beschreibung

Object.groupBy() ruft die bereitgestellte Funktion callbackFn einmal für jedes Element eines Iterables auf. Die Callback-Funktion sollte einen String oder ein Symbol zurückgeben, der bzw. das die Gruppe des jeweiligen Elements angibt. Werte, die weder Strings noch Symbole sind, werden in Strings umgewandelt. Die von callbackFn zurückgegebenen Werte werden als Schlüssel für das von Object.groupBy() zurückgegebene Objekt verwendet. Jedem Schlüssel ist ein Array zugeordnet, das alle Elemente enthält, für die die Callback-Funktion denselben Wert zurückgegeben hat.

Die Elemente im zurückgegebenen Objekt und im ursprünglichen Iterable sind dieselben (keine tiefen Kopien). Änderungen an der internen Struktur der Elemente sind daher sowohl im ursprünglichen Iterable als auch im zurückgegebenen Objekt sichtbar.

Beispiele

Object.groupBy() verwenden

Zunächst definieren wir ein Array mit Objekten, die einen Vorrat verschiedener Lebensmittel darstellen. Jedes Lebensmittel hat einen type und eine quantity.

js
const inventory = [
  { name: "asparagus", type: "vegetables", quantity: 5 },
  { name: "bananas", type: "fruit", quantity: 0 },
  { name: "goat", type: "meat", quantity: 23 },
  { name: "cherries", type: "fruit", quantity: 5 },
  { name: "fish", type: "meat", quantity: 22 },
];

Der folgende Code gruppiert die Elemente nach dem Wert ihrer Property type.

js
const result = Object.groupBy(inventory, ({ type }) => type);

/* Result is:
{
  vegetables: [
    { name: 'asparagus', type: 'vegetables', quantity: 5 },
  ],
  fruit: [
    { name: "bananas", type: "fruit", quantity: 0 },
    { name: "cherries", type: "fruit", quantity: 5 }
  ],
  meat: [
    { name: "goat", type: "meat", quantity: 23 },
    { name: "fish", type: "meat", quantity: 22 }
  ]
}
*/

Die Arrow-Funktion gibt bei jedem Aufruf lediglich den type des jeweiligen Array-Elements zurück. Das Funktionsargument { type } ist ein einfaches Beispiel für die Destrukturierung von Objekten in Funktionsargumenten. Dabei wird die Property type eines als Parameter übergebenen Objekts ausgelesen und im Funktionskörper einer Variablen namens type zugewiesen. So lässt sich innerhalb einer Funktion sehr knapp auf die relevanten Werte der Elemente zugreifen.

Wir können Gruppen auch aus den Werten einer oder mehrerer Properties der Elemente ableiten. Das folgende, sehr ähnliche Beispiel ordnet die Einträge anhand des Werts des Felds quantity den Gruppen ok oder restock zu.

js
function myCallback({ quantity }) {
  return quantity > 5 ? "ok" : "restock";
}

const result2 = Object.groupBy(inventory, myCallback);

/* Result is:
{
  restock: [
    { name: "asparagus", type: "vegetables", quantity: 5 },
    { name: "bananas", type: "fruit", quantity: 0 },
    { name: "cherries", type: "fruit", quantity: 5 }
  ],
  ok: [
    { name: "goat", type: "meat", quantity: 23 },
    { name: "fish", type: "meat", quantity: 22 }
  ]
}
*/

Spezifikationen

Spezifikation
ECMAScript® 2027 Language Specification
# sec-object.groupby

Browser-Kompatibilität

Siehe auch