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の違い
| 特徴 | Set | Map |
|---|---|---|
| 格納するもの | 値のみを格納します。 | キーと値のペアを格納します。 |
| 重複 | 同じ値は1つしか格納されません。 | 同じキーは1つしか格納されませんが、値は重複可能です。 |
| 主な用途 | 一意なリストの管理、重複の除去に使用します。 | キーで値を検索する辞書的な用途に使用します。 |
概要
『Set』は一意な値のみを格納するコレクションで、ES6で追加されたデータ構造です。配列と異なり同じ値を重複して格納できないため、配列の重複除去や、値の存在確認を高速に行いたい場面に最適です。
最もよく使われるパターンは配列の重複除去です。『new Set(配列)』で重複を除去し、『Array.from()』やスプレッド構文で配列に戻すことで、簡潔に重複なしの配列を作成できます。
キーと値のペアで管理したい場合は『Map』を使用してください。
対応ブラウザ
デスクトップ
37 以前 ×
12 以前 ×
7 以前 ×モバイル
Android Browser
43 以降 ○
37 以前 ×
Chrome Android
43 以降 ○
37 以前 ×
Firefox Android
79 以降 ○
13 以前 ×記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。