JavaScript/Object/groupBy
< JavaScript | Object
Object.groupBy() は、JavaScriptでオブジェクトをキーに基づいてグループ化するための便利なメソッドです。このメソッドは、配列やその他の反復可能オブジェクト(Iterable
)の要素を指定した関数に基づいて分類し、グループごとのキーを持つオブジェクトを生成します。
- 基本構文
Object.groupBy(iterable, callback)
- パラメータ
-
iterable
- 分類対象となる反復可能オブジェクト(配列、ジェネレーター、セットなど)。
callback
- グループ化のためのキーを生成する関数。
- この関数は次の3つの引数を取ります:
element
- 現在の要素。index
- 現在の要素のインデックス。iterable
- メソッドが適用される元の反復可能オブジェクト。
戻り値
編集キーと対応するグループの要素を持つオブジェクト。
使用例
編集以下は、Object.groupBy()
の具体的な使用例です。
配列を数値の奇数と偶数でグループ化する
編集const numbers = [1, 2, 3, 4, 5, 6]; const grouped = Object.groupBy(numbers, num => (num % 2 === 0 ? 'even' : 'odd')); console.log(grouped); // { // odd: [1, 3, 5], // even: [2, 4, 6] // }
文字列の長さでグループ化する
編集const words = ['apple', 'banana', 'cherry', 'date']; const grouped = Object.groupBy(words, word => word.length); console.log(grouped); // { // 5: ['apple'], // 6: ['banana', 'cherry'], // 4: ['date'] // }
ジェネレーターを使ったグループ化
編集反復可能オブジェクトを扱う例として、ジェネレーターを使ったグループ化を以下に示します。
function* numbers() { for (let i = 0; i < 12; i++) { yield i; } } const grouped = Object.groupBy(numbers(), num => (num % 2 === 0 ? 'even' : 'odd')); console.log(grouped); // { // odd: [1, 3, 5, 7, 9, 11], // even: [0, 2, 4, 6, 8, 10] // }
日付を年ごとにグループ化する
編集const dates = [ '2022-01-01', '2023-02-01', '2022-03-01', '2023-04-01' ]; const grouped = Object.groupBy(dates, date => new Date(date).getFullYear()); console.log(grouped); // { // 2022: ['2022-01-01', '2022-03-01'], // 2023: ['2023-02-01', '2023-04-01'] // }
注意点
編集- 配列以外の反復可能オブジェクトもサポート
Object.groupBy()
は配列だけでなく、ジェネレーター、セットなどの反復可能オブジェクト(Iterable
)にも対応しています。
- キーの一意性
- グループ化のキーは文字列型に変換されるため、キーが重複した場合は上書きされません。
- コールバック関数の正確さ
- グループ化のロジックはコールバック関数に依存するため、意図したグループ分けを行うには正確な関数を提供する必要があります。
サポート状況
編集Object.groupBy()
は、最新の JavaScript 標準(ES2024 以降)でサポートされています。使用前にブラウザや環境の互換性を確認してください。
まとめ
編集Object.groupBy()
は、配列や反復可能オブジェクトを効率的にグループ化するための強力なツールです。数値、文字列、日付、ジェネレーターなど、さまざまなデータを分類する際に役立ちます。