CHAPTER 9 · 2 LESSONS · 26 問

キーと集合で持つ

`Map` で好きなキーの組を持ち、`Set` で重複しない集まりを作る。配列とオブジェクトの次の入れもの。

値をまとめて持つ入れものは、これまで2つ覚えた。順番で持つ配列と、名前で持つオブジェクトだよ。この章では、そのどちらでも書きにくい場面のための入れものを2つ足す。

ひとつめが Map。オブジェクトと同じく「キーと値の組」を持つのだけれど、性質がいくつか違う。いちばん効くのは件数がすぐ分かることだ。オブジェクトに何件入っているかは素直には数えられないけれど、Map なら size で分かる。足す・取る・消す・在るか調べる、が全部メソッドとして用意されているのも読みやすい。

もうひとつが Set。こちらは「重複しない集まり」だよ。同じ値を何度足しても1つにまとまる。配列から重複を取りのぞきたい、という場面が実際よくあって、そこで真価が出る。順番は保たれるけれど、番号で取り出すことはできない。「在るか無いか」を扱うための入れものだと思ってほしい。

使い分けの目安はこうだ。項目の名前があらかじめ決まっているならオブジェクト(人なら名前と年齢、と決まっている)。キーが実行してみないと分からないなら Map(人ごとの点数、など)。在るか無いかだけを持ちたいなら Set

どちらも new で作る。クラスの章で作ったインスタンスと同じ書き方だよ。JavaScript があらかじめ用意してくれているクラスだ、と考えれば納得しやすい。

ひとつ注意しておくと、MapSet をそのまま表示しても中身は見えない。この教材の表示のしかたでは {} としか出ないよ。中身を確かめたいときは、件数を出すか、for...of で1件ずつ出すか、配列に広げてから出す。この章の演習もそういう形で書いてある。

配列とオブジェクトで足りている場面で無理に使う必要はない。ただ、他人のコードにはふつうに出てくるし、重複をなくしたいという場面に出会ったときに Set を思い出せるかどうかで、書くコードの量がまるで変わるよ。

この章のレッスン

Map と Set

  1. 86キーと値の組を持つ Mapnew Map() を作って、キーと値の組を足したり取ったり数えたりしよう。 問題へ
  2. 87重複しない集まり Setnew Set() を使って、同じ値が2つ入らない集まりを作ろう。 問題へ

つぎは「失敗に備える」。エラーが起きても止まらないようにし、おかしな値が来たら自分からエラーを出す。