0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【JavaScript】Setって何?

Last updated at Posted at 2024-12-13

Setとは?

Setオブジェクトは集合です。
重複する値は入れられないという特徴があります。

また、Set[Symbol.iterator]メソッドを持つため反復可能Iterable)です。

使い方

Setオブジェクトはコンストラクタから作成できます。

const set = new Set()

第一引数に配列(反復可能オブジェクト)を入れることで、Setの初期値を設定することもできます。

const array = [1, 4, 5]
const set = new Set(array)

配列の要素を一意にする

Setは要素の重複を許しません。
そのため、本来の使い方ではなさそうですが、配列の要素から重複を削除する目的でも使えます。

例えばこんな感じです。

// 重複を削除したい配列
const array = [1, 2, 2, 5, 6 ,6];

const set = new Set(array);
[...set]; // [1, 2, 5, 6]

これは、Setが以下の特徴を持っているからできます。

  • コンストラクタが反復可能オブジェクトを取る
  • Set重複を許さない
  • Set自身が反復可能なので、スプレッド構文配列に変換できる

よく使うメソッド

Setオブジェクトはいくつかのメソッドを持っています。
ここでは、その中でも個人的によく使うものを紹介します。

add

与えられた要素を追加します。

const set = new Set()
set.add(1)
set.add(3)

set // Set(2) {1, 3}

なお、その要素がすでにSetオブジェクト内にあった場合、要素は追加されません。

const set = new Set()
set.add(3)
set.add(3) // すでに追加した要素を追加

set // Set(1) {3}

has

与えられた要素がSet内に存在するかどうかを返します。
戻り値はbooleanです。

const set = new Set([1, 5])

set.has(1) // true
set.has(2) // false

set.add(2)
set.has(2) // true

size

メソッドではなくプロパティですが、ここで紹介します。

Set要素数を示すプロパティです。

const set = new Set([1, 5, 6])
set.size // 3

set.add(2) // 要素を追加
set.size // 4

delete

与えられた要素をSetから削除します。

const set = new Set([1, 2, 3])
set.has(1) // true

set.delete(1) // 1を削除
set.has(1) // false

set.delete(3) // 3を削除
set // Set(1) {2}

clear

Setから全ての要素を削除します。

const set = new Set([1, 3, 5])
set.size // 3

set.clear()
set.size // 0

forEach

各要素を使ってループします。
与えられた関数(callbackFn)を全ての要素に対して適用するとも言います。

callbackFnは以下の引数で呼び出されます。

  1. element: 要素
  2. index: 要素のインデックス
  3. set: forEachが呼び出されているSetオブジェクト自身
const set = new Set([1, 2, 2, 3, 1, 4])
set // Set(4) {1, 2, 3, 4]

set.forEach(num => {
  console.log(`number: ${num}`)
})

// number: 1
// number: 2
// number: 3
// number: 4

集合として扱う

つい最近(2024年)、ECMAScriptにSetオブジェクトの和集合や差集合を計算するメソッドが追加されました。

例えば和集合(2つの集合を足す)は、unionメソッドで計算できます。

const set1 = new Set([1, 3, 5])
const set2 = new Set([2, 4])

const set3 = set1.union(set2) // 和集合を計算
set3 // Set(5) {1, 3, 5, 2, 4}

他にも以下のようなメソッドがあります。

詳細はMDNをご覧ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?