Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

ECMAScriptでもgroupBy()が使えるようになっていて嬉しい

ScalaユーザにはおなじみのgroupByメソッド。

val xs = List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
xs.groupBy(_ % 2)
// => Map(0 -> List(0, 2, 4, 6, 8), 1 -> List(1, 3, 5, 7, 9))

所与の関数を使ってコレクションを走査し、その返り値によって値を分類してマップにしてくれるという便利なメソッドだ。

これがJavaScriptの場合、Baseline 2024では Map.groupBy()として利用できるようになっていて、ECMAScript 2026にも登録されている。

const xs = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
Map.groupBy(xs, (n) => n % 2);
// => Map (2) { true => [0, 2, 4, 6, 8], false => [1, 3, 5, 7, 9] }

また、ECMAScript 2024ではObject.groupBy()が用意されているが、Map.groupBy()のほうが引数と返り値がより汎用的になっているようだ(文字列やsymbol以外もキーとして使えるとか、plain objectではなくMapで返ってくるといった違いがある)。

個人的にはArrayにそのままメソッドが生えてくれていたほうが嬉しいのだが、なぜかMapのstatic methodという形で実装されている。

追記

qiita.com

こういう実装になったのには大変な事情があったということがわかった。

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?