Help us understand the problem. What is going on with this article?

JavaScript Setオブジェクト

More than 1 year has passed since last update.

Setオブジェクトとは

ES2015(ES6)から導入された、重複した値がないことを保証したコレクション。
以下のような特徴があります。

  • 値が一意であることが保証されている
  • 順序を持たず、インデックスでアクセスできない

Setの使い方

動作確認環境

  • Windows8.1
  • Node.js v10.14.1

Setの作成

var set = new Set();

これで作成することができます。
中身が空のSetオブジェクトが作成されます。

コンストラクタに初期値を渡すこともできます。
初期値として渡すことができるのは、Iteratorオブジェクトです。
Iteratorについてこちらの記事がとても分かりやすかったため、リンクさせていただきます。
JavaScript の イテレータ を極める!

以下の例では、Iteratorオブジェクトである配列を初期値として渡します。

var set = new Set(["value1", "value2", "value3"]);
console.log(set.size);
// 3

サイズの取得

sizeプロパティを参照することで、Setオブジェクトに含まれる値の数を取得します。

var set = new Set(["value1", "value2", "value3"]);
console.log(set.size);    // 3

値の追加 add

add(value)で、値を追加することができます。
すでに同じ値がSetオブジェクト内にある場合は無視されます。
(エラーにはなりません。)

var set = new Set();

set.add("apple");
set.add("banana");

console.log(set.size); // 2

// すでに存在する値を追加
set.add("banana");
console.log(set.size); // 2

値の削除

delete(value)で、その値をSetオブジェクトから削除します。

var set = new Set(["value1", "value2", "value3"]);
console.log(set.size);    // 3

set.delete("value2");
console.log(set.size);    // 2

全ての値を削除

clear()で、Setオブジェクトのすべての値を削除します。

var set = new Set(["value1", "value2", "value3"]);
console.log(set.size);    // 3

set.clear();
console.log(set.size);   // 0

値が存在するかどうかの確認

has(value)で、その値がSetオブジェクトに存在するかどうかを確認できます。

var set = new Set(["value1", "value2", "value3"]);
console.log(set.has("value1"));   // true
console.log(set.has("value5"));   // false

反復処理

for...of

Setへの追加順に要素を取り出せます。

var set = new Set();

set.add("apple");
set.add("banana");
set.add("melon");

for (var value of set) {
  console.log(value);
}

// apple
// banana
// melon
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away