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という形で実装されている。
追記
こういう実装になったのには大変な事情があったということがわかった。