言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

JavaScript辞典

  1. トップページ
  2. JavaScript辞典
  3. Set

Set

対応: ES6(ECMAScript 2015)

一意な値のみを格納するコレクションです。同じ値を重複して追加することはできず、挿入順序が保持されます。

構文

// 新しいSetを作成します。
var set = new Set();

// 初期値を配列で指定して作成することもできます。
var set = new Set(["値1", "値2", "値3"]);

メソッド・プロパティ一覧

メソッド / プロパティ概要
add(値)値を追加します。すでに同じ値が存在する場合は無視され、重複しません。
has(値)指定した値が存在するかどうかを『true』または『false』で返します。
delete(値)指定した値を削除します。削除に成功した場合は『true』、値が存在しなかった場合は『false』を返します。
clear()すべての値を削除します。
size格納されている値の数を返します。
forEach(関数)すべての値に対して関数を実行します。

サンプルコード

sample_set.js
// Setの基本操作
var memberSet = new Set();

// 値を追加します。
memberSet.add("綾波レイ");
memberSet.add("碇シンジ");
memberSet.add("惣流アスカ");
memberSet.add("綾波レイ"); // すでに存在するため追加されません。

console.log(memberSet.size); // 『3』と出力されます。重複は無視されます。

// 値の存在を確認します。
console.log(memberSet.has("碇シンジ")); // 『true』と出力されます。
console.log(memberSet.has("渚カヲル")); // 『false』と出力されます。

// すべての値を順番に処理します。
memberSet.forEach(function(value) {
	console.log(value);
});

// 値を削除します。
memberSet.delete("惣流アスカ");
console.log(memberSet.size); // 『2』と出力されます。

// 配列の重複を除去する例
var numbers = [1, 2, 3, 2, 1, 4, 3, 5];
var uniqueNumbers = new Set(numbers);
var result = Array.from(uniqueNumbers); // Setを配列に変換します。
console.log(result); // 『[1, 2, 3, 4, 5]』と出力されます。

// Array.fromを使ってSetを配列に変換する短い書き方
var unique = Array.from(new Set([1, 2, 3, 2, 1]));
console.log(unique); // 『[1, 2, 3]』と出力されます。

// 文字列の配列から重複を除去する実用例
var pilots = ["綾波レイ", "碇シンジ", "惣流アスカ", "綾波レイ", "渚カヲル", "碇シンジ"];
var uniquePilots = Array.from(new Set(pilots));
console.log(uniquePilots); // 『["綾波レイ", "碇シンジ", "惣流アスカ", "渚カヲル"]』と出力されます。

// 値が存在するかの高速チェック(配列の indexOf より速い)
var allowedUsers = new Set(["綾波レイ", "碇シンジ", "惣流アスカ"]);
function canAccess(name) {
	return allowedUsers.has(name);
}
console.log(canAccess("綾波レイ")); // 『true』と出力されます。
console.log(canAccess("渚カヲル")); // 『false』と出力されます。
3
true
false
綾波レイ
碇シンジ
惣流アスカ
2
[ 1, 2, 3, 4, 5 ]
[ 1, 2, 3 ]
[ '綾波レイ', '碇シンジ', '惣流アスカ', '渚カヲル' ]
true
false

SetとMapの違い

特徴SetMap
格納するもの値のみを格納します。キーと値のペアを格納します。
重複同じ値は1つしか格納されません。同じキーは1つしか格納されませんが、値は重複可能です。
主な用途一意なリストの管理、重複の除去に使用します。キーで値を検索する辞書的な用途に使用します。

概要

『Set』は一意な値のみを格納するコレクションで、ES6で追加されたデータ構造です。配列と異なり同じ値を重複して格納できないため、配列の重複除去や、値の存在確認を高速に行いたい場面に最適です。

最もよく使われるパターンは配列の重複除去です。『new Set(配列)』で重複を除去し、『Array.from()』やスプレッド構文で配列に戻すことで、簡潔に重複なしの配列を作成できます。

キーと値のペアで管理したい場合は『Map』を使用してください。

対応ブラウザ

Chrome Chrome
49 以降
37 以前 ×
Firefox Firefox
57 以降
12 以前 ×
Safari Safari
18 以降
7 以前 ×
Edge Edge
80 以降
11 以前 ×
IE IE
11 以降
10 以前 ×
Opera Opera
48 以降
24 以前 ×
iOS Safari iOS Safari
18 以降
7 以前 ×
Android Browser Android Browser
43 以降
37 以前 ×
Chrome Android Chrome Android
43 以降
37 以前 ×
Firefox Android Firefox Android
79 以降
13 以前 ×

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。