情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

ECMAScript 6の新機能(15)セット

ECMAScript 6でセットが追加され、Setクラスとして提供されています。

Setクラスでは要素として任意の値を指定することができます。

セットの作成

セットを作成するにはSetクラスのコンストラクタを使用します。

C:\work\node>node
> new Set()
Set {}

第1引数にイテラブルを指定することもできます。この場合、イテラブルの要素がそのままセットの要素となります。

> new Set([100, 200])
Set { 100, 200 }

以後Setクラスのインスタンスをsetと表記します。

要素の追加

セットに要素を追加するにはset.add関数を使用します。

第1引数に要素を指定します。

> var set = new Set()
undefined
> set.add(77)
Set { 77 }
> set.add(777)
Set { 77, 777 }
> set.add(77)
Set { 77, 777 }
> set.add(777)
Set { 77, 777 }

要素の削除

セットから要素を削除するにはset.delete関数を使用します。

第1引数に要素を指定します。

返り値として要素が存在していたかが真偽値として得られます。

> set.delete(77)
true
> set.delete(999)
false

要素の存在チェック

セットに要素が存在しているかをチェックするにはset.has関数を使用します。

第1引数に要素を指定します。

返り値として要素が存在しているかが真偽値として得られます。

> set.has(77)
false
> set.has(777)
true

全ての要素の削除

セットの全ての要素を削除するにはset.clear関数を使用します。

> set.add(1)
Set { 777, 1 }
> set.add(13)
Set { 777, 1, 13 }
> set.clear()
undefined
> set
Set {}

要素数の取得

セットの要素の数を取得するにはset.sizeを使用します。

> set.size
0
> set.add(1)
Set { 1 }
> set.size
1
> set.add(13)
Set { 1, 13 }
> set.size
2

これは関数ではありませんので注意してください

> set.size()
TypeError: set.size is not a function
    at repl:1:5
    at REPLServer.defaultEval (repl.js:272:27)
    at bound (domain.js:280:14)
    at REPLServer.runBound [as eval] (domain.js:293:12)
    at REPLServer.<anonymous> (repl.js:441:10)
    at emitOne (events.js:101:20)
    at REPLServer.emit (events.js:188:7)
    at REPLServer.Interface._onLine (readline.js:224:10)
    at REPLServer.Interface._line (readline.js:566:8)
    at REPLServer.Interface._ttyWrite (readline.js:843:14)

要素

要素が同一のものであるか判定する方法は===演算子の判定方法とほぼ同じですが、NaNNaNと同一であると判定される点のみが異なります。

> NaN === NaN
false
> set.add(NaN)
Set { 1, 13, NaN }
> set.add(NaN)
Set { 1, 13, NaN }

イテラブル

セットの全ての要素から成るイテラブルを取得するにはset.keys関数かset.values関数を使用します。

> set.keys()
SetIterator { 1, 13, NaN }
> set.values()
SetIterator { 1, 13, NaN }

セットの全ての要素が2つ並んだ配列から成るイテラブルを取得するにはset.entries関数を使用します。

> set.entries()
SetIterator { [ 1, 1 ], [ 13, 13 ], [ NaN, NaN ] }

また、set自体もセットの全ての要素から成るイテラブルです

なお、これらのイテラブルは要素がセットに追加されたのと同じ順序で要素を返します。

全ての要素に対する処理

セットの全ての要素に対して処理を行うにはset.forEach関数を使用します。

第1引数に処理を関数として指定します。

この関数の第1引数は要素の値であり、第2引数も要素の値であり、第3引数はセットです。

第2引数に第1引数の処理を表す関数の内部におけるthisの値を指定します。この引数は指定しなくても構いません。この引数を指定しなかった場合にはthisの値はundefinedとなります。

> set.forEach(function (value, value2, set) {
... console.log(value);
... })
1
13
NaN
undefined
pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-ecmascript 2015, ecmascript 6, Javascript