Esta página ha sido traducida del inglés por la comunidad. Aprende más y únete a la comunidad de MDN Web Docs.

View in English Always switch to English

Object.groupBy()

Baseline 2024
Newly available

Since ⁨March 2024⁩, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

Nota: En algunas versiones de ciertos navegadores, este método fue implementado como el método Array.prototype.group(). Debido a problemas de compatibilidad web, ahora es implementado como un método estático. Consulta la tabla de compatibilidad con navegadores para más detalles.

El método estático Object.groupBy() agrupa los elementos de un iterable según las cadenas que devuelve la función proporcionada. El objeto resultante incluye una propiedad distinta para cada grupo, y cada una contiene un arreglo con los elementos que pertenecen a ese grupo.

Este método se debe usar cuando los nombres de los grupos pueden representarse como cadenas de texto. Si se necesita agrupar elementos utilizando como clave un valor arbitrario, se debe usar Map.groupBy() en su lugar.

Pruébalo

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 }]

Sintaxis

js
Object.groupBy(items, callbackFn)

Parámetros

items

Un iterable (como un Array) cuyos elementos se agruparán.

callbackFn

Una función que se ejecuta por cada elemento del iterable. Debe devolver un valor que pueda usarse como clave de propiedad (una cadena o un symbol) indicando el grupo del elemento actual. La función es llamada con los siguientes parámetros:

element

El elemento actual que está siendo procesado.

index

El índice del elemento actual que esta siendo procesado.

Valor regresado

Un objeto de prototipo null que contiene propiedades para cada grupo. A cada propiedad se le asigna un arreglo con los elementos del grupo correspondiente.

Descripción

Object.groupBy() llama a la función callbackFn una vez por cada elemento del iterable. Esta función debe devolver una cadena o un symbol (los valores de otros tipos son transformados en cadenas) que indique el grupo al que pertenece el elemento. Los valores devueltos por callbackFn se utilizan como claves del objeto retornado por Object.groupBy(). Para cada valor devuelto por la función, se crea una clave que agrupa en un arreglo a todos los elementos correspondientes.

Tanto los elementos del objeto devuelto como los del iterable original son los mismos (no son copias profundas). Cualquier cambio en la estructura interna de los elementos se reflejará tanto en el iterable original como en el objeto devuelto.

Ejemplos

Utilizando Object.groupBy()

Primero definimos un arreglo que contiene objetos que representan un inventario de distintos alimentos. Cada comida tiene un type y un 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 },
];

El siguiente código agrupa los elementos según sea el valor de su propiedad type.

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

/* El resultado es:
{
  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 }
  ]
}
*/

La función flecha simplemente devuelve la propiedad type de cada elemento del arreglo cada vez que es llamada. Nótese que el argumento de la función { type } es un ejemplo básico de la sintaxis de desestructuración de objetos para parámetros de función. Esto extrae la propiedad type del objeto que se pasa como parámetro y la asigna a una variable llamada type dentro del cuerpo de la función. Es una forma muy concisa de acceder a los valores relevantes de los elementos dentro de una función.

También podemos crear grupos a partir de valores inferidos de una o más propiedades de los elementos. A continuación se muestra un ejemplo muy similar, que clasifica los elementos en los grupos ok o restock, según el valor de la propiedad quantity.

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

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

/* El resultado es:
{
  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 }
  ]
}
*/

Especificaciones

Specification
ECMAScript® 2026 Language Specification
# sec-object.groupby

Compatibilidad con navegadores

Véase también