Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. Reference
  4. Standard built-in objects
  5. Map
  6. groupBy()

Map.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.

Note:In some versions of some browsers, this method was implemented as the methodArray.prototype.groupToMap(). Due to web compatibility issues, it is now implemented as a static method. Check thebrowser compatibility table for details.

TheMap.groupBy() static method groups the elements of a given iterable using the values returned by a provided callback function. The final returnedMap uses the unique values from the test function as keys, which can be used to get the array of elements in each group.

The method is primarily useful when grouping elements that are associated with an object, and in particular when that object might change over time. If the object is invariant, you might instead represent it using a string, and group elements withObject.groupBy().

Try it

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 restock = { restock: true };const sufficient = { restock: false };const result = Map.groupBy(inventory, ({ quantity }) =>  quantity < 6 ? restock : sufficient,);console.log(result.get(restock));// [{ name: "bananas", type: "fruit", quantity: 5 }]

Syntax

js
Map.groupBy(items, callbackFn)

Parameters

items

Aniterable (such as anArray) whose elements will be grouped.

callbackFn

A function to execute for each element in the iterable. It should return a value (object orprimitive) indicating the group of the current element. The function is called with the following arguments:

element

The current element being processed.

index

The index of the current element being processed.

Return value

AMap object with keys for each group, each assigned to an array containing the elements of the associated group.

Description

Map.groupBy() calls a providedcallbackFn function once for each element in an iterable. The callback function should return a value indicating the group of the associated element. The values returned bycallbackFn are used as keys for theMap returned byMap.groupBy(). Each key has an associated array containing all the elements for which the callback returned the same value.

The elements in the returnedMap and the original iterable are the same (notdeep copies). Changing the internal structure of the elements will be reflected in both the original iterable and the returnedMap.

This method is useful when you need to group information that is related to a particular object that might potentially change over time. This is because even if the object is modified, it will continue to work as a key to the returnedMap. If you instead create a string representation for the object and use that as a grouping key inObject.groupBy(), you must maintain the mapping between the original object and its representation as the object changes.

Note:To access the groups in the returnedMap, you must use the same object that was originally used as a key in theMap (although you may modify its properties). You can't use another object that just happens to have the same name and properties.

Map.groupBy does not read the value ofthis. It can be called on any object and a newMap instance will be returned.

Examples

Using Map.groupBy()

First we define an array containing objects representing an inventory of different foodstuffs. Each food has atype and aquantity.

js
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 },];

The code below usesMap.groupBy() with an arrow function that returns the object keys namedrestock orsufficient, depending on whether the element hasquantity < 6. The returnedresult object is aMap so we need to callget() with the key to obtain the array.

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

Note that the function argument{ quantity } is a basic example ofobject destructuring syntax for function arguments. This unpacks thequantity property of an object passed as a parameter, and assigns it to a variable namedquantity in the body of the function. This is a very succinct way to access the relevant values of elements within a function.

The key to aMap can be modified and still used. However you can't recreate the key and still use it. For this reason it is important that anything that needs to use the map keeps a reference to its keys.

js
// The key can be modified and still usedrestock["fast"] = true;console.log(result.get(restock));// [{ name: "bananas", type: "fruit", quantity: 5 }]// A new key can't be used, even if it has the same structure!const restock2 = { restock: true };console.log(result.get(restock2)); // undefined

Specifications

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

Browser compatibility

See also

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp