JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptのSet(セット)とは?特徴と基本的な使い方を解説

セット(Set)とは、特定の値を「順序を持たず」「重複なく」格納できる抽象データ型です。数学における「有限集合」の概念をコンピュータ上で実装したものといえます。他のコレクション型と大きく異なるのは、特定の要素を取り出すというよりも、ある値がその集合に含まれているかどうか(メンバーシップ)を確認する目的で使われることが多いという点です。

セットを使うべき場面は、主に次のようなケースです。

  • 順序が重要でないコンテナに、一意な要素だけを格納したい場合
  • さまざまなオブジェクトの「所属しているかどうか」の判定を主に行いたい場合
  • 数学的な集合と同じように、和集合・積集合・差集合などの演算を行いたい場合

JavaScriptのSetオブジェクトを使用すると、プリミティブ値でもオブジェクト参照でも、あらゆる型の一意な値を格納できます。

注意:セット内の各値は一意でなければならないため、値の等価性がチェックされます。重複した値は自動的に無視されます。

セットの作成と使用方法

new Set()で空のセットを作成し、add()メソッドで要素を追加します。同じ値を何度追加しても、実際には一度しか登録されません。

let mySet = new Set();
mySet.add(1);
mySet.add(1);
mySet.add(1);
// 追加されるのは1回のみ
console.log(mySet.size)

// 等しいとは見なされない
mySet.add({});
mySet.add({});
console.log(mySet.size)

let a = {};
mySet.add(a);
mySet.add(a);
// 同じ参照なので1回のみ追加される
console.log(mySet.size)

出力結果

1
3
4

この例では、最初の数値1は3回追加してもサイズが「1」のままですが、空のオブジェクト{}を2回追加した時点でサイズが「3」になっています。これは、追加された各オブジェクトが互いに等しいとは見なされないためです。理由は、これらのオブジェクトがそれぞれ異なるメモリ領域を参照しており、参照先が違う限り同一のオブジェクトとして扱われないからです。

一方、変数aに代入した同じオブジェクト参照を2回追加しても、サイズは「4」から増えません。同じメモリ上のオブジェクトを指しているため、重複と判断されて一度しか登録されないのです。この挙動を理解しておくと、Setを使った重複管理を正確に設計できます。

  1. JavaScriptの関数式(Function Expression)とは?特徴と使い方を解説

    JavaScriptにおける関数式(Function Expression)とは、関数を変数に代入して定義する方法のことです。代入された関数は、その変数名を使って後から呼び出すことができます。 関数式の主な特徴 関数を変数に格納し、変数名を指定して呼び出せる 通常の関数宣言(function declaration)と異なり、ホイスティング(巻き上げ)が行われないため、定義よりも前に呼び出すことはできない 多くの場合、名前を持たない「無名関数(匿名関数)」として定義される コールバック関数や即時実行関数(IIFE)など、さまざまな場面で活用できる この「ホイスティングされない」という点が重

  2. JavaScriptのクロージャとは?仕組みと実装例をわかりやすく解説

    クロージャとはJavaScriptにおけるクロージャ(Closure)とは、外側の関数の実行が完了して値を返した後であっても、内側の関数から外側の関数のスコープ(変数)にアクセスできる仕組みのことです。言い換えれば、内側の関数は、外側の関数の変数に対して常にアクセスできるということです。この性質を活用することで、データを外部から直接操作されないように隠蔽したり、関数の呼び出し間で状態を保持する処理を実現したりすることが可能になります。クロージャのサンプルコード以下は、JavaScriptでクロージャを使用した具体的なコード例です。ボタンをクリックすると、クロージャによって保持された値を使って2