CHAPTER 9 · 2 LESSONS · 26 問
キーと集合で持つ
`Map` で好きなキーの組を持ち、`Set` で重複しない集まりを作る。配列とオブジェクトの次の入れもの。
値をまとめて持つ入れものは、これまで2つ覚えた。順番で持つ配列と、名前で持つオブジェクトだよ。この章では、そのどちらでも書きにくい場面のための入れものを2つ足す。
ひとつめが Map。オブジェクトと同じく「キーと値の組」を持つのだけれど、性質がいくつか違う。いちばん効くのは件数がすぐ分かることだ。オブジェクトに何件入っているかは素直には数えられないけれど、Map なら size で分かる。足す・取る・消す・在るか調べる、が全部メソッドとして用意されているのも読みやすい。
もうひとつが Set。こちらは「重複しない集まり」だよ。同じ値を何度足しても1つにまとまる。配列から重複を取りのぞきたい、という場面が実際よくあって、そこで真価が出る。順番は保たれるけれど、番号で取り出すことはできない。「在るか無いか」を扱うための入れものだと思ってほしい。
使い分けの目安はこうだ。項目の名前があらかじめ決まっているならオブジェクト(人なら名前と年齢、と決まっている)。キーが実行してみないと分からないなら Map(人ごとの点数、など)。在るか無いかだけを持ちたいなら Set。
どちらも new で作る。クラスの章で作ったインスタンスと同じ書き方だよ。JavaScript があらかじめ用意してくれているクラスだ、と考えれば納得しやすい。
ひとつ注意しておくと、Map や Set をそのまま表示しても中身は見えない。この教材の表示のしかたでは {} としか出ないよ。中身を確かめたいときは、件数を出すか、for...of で1件ずつ出すか、配列に広げてから出す。この章の演習もそういう形で書いてある。
配列とオブジェクトで足りている場面で無理に使う必要はない。ただ、他人のコードにはふつうに出てくるし、重複をなくしたいという場面に出会ったときに Set を思い出せるかどうかで、書くコードの量がまるで変わるよ。
この章のレッスン
Map と Set