セット(Set)

目次

セット

set = new Set([iterable])

set.add(value)

ES6(ES2015) でサポートされたオブジェクトで、値のリストを保持します。Chrome 38, Firefox 13, Internet Explorer 11, Opera 25, Safari 7.1 以降で使用できます。

JavaScript
var set = new Set();
set.add("Tanaka");
set.add("Suzuki");
console.log(set);     // "Tanaka", "Suzuki"

同じ値を追加してもリストは増えません。

JavaScript
set.add("Tanaka");
set.add("Suzuki");
set.add("Suzuki");
console.log(set);     // "Tanaka", "Suzuki"

コンストラクタには値の配列を指定できます。Internet Explorer と Safari ではサポートされていません。

JavaScript
var set = new Set(["Tanaka", "Suzuki"]);

set.size

リストの個数を返します。

JavaScript
var set = new Set();
set.add("Tanaka");
set.add("Suzuki");
set.size;                  // => 2

set.has(value)

has() を用いて、値が含まれているか確認することができます。

JavaScript
var set = new Set()
set.add("Tanaka");
set.add("Suzuki");
if (set.has("Tanaka")) {
  console.log("Exist!");
}

set.delete(value)

set.clear()

delete() は指定した値を、clear() はすべての値をクリアします。

JavaScript
var set = new Set();
set.add("Tanaka");
set.add("Suzuki");
set.delete("Tanaka");
set.clear();

set.keys()

set.values()

set.entries()

for ... of 文でキー・バリューのリストを扱うことができます。Internet Explorer と Opera ではサポートされていません。

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

keys(), value(), entries() も使用できますが、key にも value にも同じ値が格納されます。

JavaScript
for (var key of set.keys()) {
  console.log(key);
}
for (var value of set.values()) {
  console.log(value);
}
for (var [key, value] of set.entries()) {
  console.log(key, "=", value);
}

set.forEach(function[, this])

forEach 文でキー・バリューのリストを扱うことができます。こちらは、Internet Explorer でもサポートされていますが、Opera でサポートされていません。key も指定できますが、key と value に同じ値が格納されます。

JavaScript
set.forEach(function(value) {
  console.log(value);
})
set.forEach(function(value, key) {
  console.log(key, ":", value);
})
set.forEach(function(value, key, set) {
  console.log(key, value, set);
});
set.forEach(function(value, key) {
  console.log(key, value, this);
}, set);   // setをthisとして引き渡す

set.intersection(set2)

ES2025 で追加されました。setset2 の両方に含まれる要素のセットを返します。

const A = new Set([1, 2, 3, 4]);
const B = new Set([3, 4, 5, 6]);
console.log(A.intersection(B));        // => [3, 4]

set.union(set2)

ES2025 で追加されました。set または set2 どちらかに含まれる要素のセットを返します。

const A = new Set([1, 2, 3, 4]);
const B = new Set([3, 4, 5, 6]);
console.log(A.union(B));               // => [1, 2, 3, 4, 5, 6]

set.difference(set2)

ES2025 で追加されました。set の内、set2 に含まれない要素のセットを返します。

const A = new Set([1, 2, 3, 4]);
const B = new Set([3, 4, 5, 6]);
console.log(A.difference(B));          // => [1, 2]

set.symmetricDifference(set2)

ES2025 で追加されました。set または set2 どちらか一方のみに含まれる要素のセットを返します。

const A = new Set([1, 2, 3, 4]);
const B = new Set([3, 4, 5, 6]);
console.log(A.symmetricDifference(B)); // => [1, 2, 5, 6]

set.isSubsetOf(set2)

ES2025 で追加されました。setset2 のサブセット(部分集合)であれば true、さもなくば false を返します。

const A = new Set([1, 2, 3]);
const B = new Set([0, 1, 2, 3, 4]);
console.log(A.isSubsetOf(B));          // => true

set.isSupersetOf(set2)

ES2025 で追加されました。setset2 のスーパーセット(部分集合)であれば true、さもなくば false を返します。

const A = new Set([0, 1, 2, 3, 4]);
const B = new Set([1, 2, 3]);
console.log(A.isSupersetOf(B));        // => true

set.isDisjointFrom(set2)

ES2025 で追加されました。setset2 に共通要素がひとつも無ければ true、さもなくば false を返します。

const A = new Set([1, 2, 3]);
const B = new Set([4, 5, 6]);
console.log(A.isDisjointFrom(B));      // => true

弱参照セット(WeakSet)

WeakSet は WeakMap のセット版です。詳細は WeakMap を参照してください。