Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.
Object.groupBy()
Baseline 2024Newly 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étodoArray.prototype.group()
. Debido a problemas de compatibilidad web, ahora es implementado como un método estático. Consulta latabla de compatibilidad con navegadores para más detalles.
El método estáticoObject.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 usarMap.groupBy()
en su lugar.
In this article
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
Object.groupBy(items, callbackFn)
Parámetros
items
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 unsymbol) indicando el grupo del elemento actual. La función es llamada con los siguientes parámetros:
Valor regresado
Unobjeto de prototiponull
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óncallbackFn
una vez por cada elemento del iterable. Esta función debe devolver una cadena o un symbol (los valores de otros tipos sontransformados en cadenas) que indique el grupo al que pertenece el elemento. Los valores devueltos porcallbackFn
se utilizan como claves del objeto retornado porObject.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 soncopias 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 untype
y unquantity
.
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 propiedadtype
.
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 propiedadtype
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 dedesestructuración de objetos para parámetros de función. Esto extrae la propiedadtype
del objeto que se pasa como parámetro y la asigna a una variable llamadatype
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 gruposok
orestock
, según el valor de la propiedadquantity
.
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
Loading…