JavaScript 速習チュートリアル

JavaScript セットの集合演算

1. 集合演算メソッド (Logic Set Methods)

JavaScript 2025 では、Set オブジェクトに 7 つの新しい論理メソッド(集合演算メソッド)が追加されました。これらにより、複数のセット間でのデータの比較や結合が非常に容易になります。

  • union()(和集合)
  • difference()(差集合)
  • intersection()(積集合)
  • isDisjointFrom()(互いに素であるかの判定)
  • isSubsetOf()(部分集合であるかの判定)
  • isSupersetOf()(上位集合であるかの判定)
  • symmetricDifference()(対称差集合)

2. ブラウザのサポート状況 (Browser Support)

Set Logic は ECMAScript 2025 (ES2025) の機能です。
JavaScript 2025 は、2025年5月以降、すべてのモダンブラウザで完全にサポートされています。

ChromeEdgeFirefoxSafariOpera
136 (2025年4月)136 (2025年4月)129 (2024年8月)18.2 (2024年12月)120 (2025年5月)

3. union() メソッド

union() メソッドは、2 つのセットの 和集合 を返します。
このメソッドは、「元のセット」または「引数として渡されたセット」、あるいは「その両方」に含まれるすべての要素を含む新しいセットを生成します。

const A = new Set(['a', 'b', 'c']);
const B = new Set(['b', 'c', 'd']);

// A と B の要素をすべて統合した新しいセットを作成
const C = A.union(B); 
// 結果: Set {'a', 'b', 'c', 'd'}

4. intersection() メソッド

intersection() メソッドは、2 つのセットの 積集合(共通部分) を返します。
このメソッドは、「元のセット」と「引数として渡されたセット」の両方に共通して存在する要素のみを含む新しいセットを生成します。

const A = new Set(['a', 'b', 'c']);
const B = new Set(['b', 'c', 'd']);

// 両方のセットに存在する要素のみを抽出
const C = A.intersection(B);
// 結果: Set {'b', 'c'}

5. difference() メソッド

difference() メソッドは、2 つのセットの 差集合 を返します。
このメソッドは、「元のセット」には存在するが、「引数として渡されたセット」には存在しない要素のみを含む新しいセットを生成します。

const A = new Set(['a', 'b', 'c']);
const B = new Set(['b', 'c', 'd']);

// A には存在するが、B には存在しない要素を抽出
const C = A.difference(B);
// 結果: Set {'a'}

6. symmetricDifference() メソッド

symmetricDifference() メソッドは、2 つのセットの 対称差集合 を返します。
このメソッドは、「元のセット」または「引数として渡されたセット」のどちらか一方にのみ存在する要素(両方に共通する要素を除いたもの)を含む新しいセットを生成します。

const A = new Set(['a', 'b', 'c']);
const B = new Set(['b', 'c', 'd']);

// 共通部分 ('b', 'c') を除いた、それぞれのセット固有の要素を統合
const C = A.symmetricDifference(B);
// 結果: Set {'a', 'd'}

7. isSubsetOf() メソッド

isSubsetOf() メソッドは、元のセットのすべての要素が「引数として渡されたセット」にも含まれている場合に true を返します(部分集合の判定)。

const A = new Set(['a', 'b', 'c']);
const B = new Set(['b', 'c', 'd']);

// A のすべての要素が B に含まれているかを確認
let answer = A.isSubsetOf(B);
// 結果: false

8. isSupersetOf() メソッド

isSupersetOf() メソッドは、「引数として渡されたセット」のすべての要素が、元のセットにも含まれている場合に true を返します(上位集合の判定)。

const A = new Set(['a', 'b', 'c']);
const B = new Set(['b', 'c', 'd']);

// B のすべての要素が A に含まれているかを確認
let answer = A.isSupersetOf(B);
// 結果: false

9. isDisjointFrom() メソッド

isDisjointFrom() メソッドは、元のセットと「引数として渡されたセット」に共通する要素が一つもない場合に true を返します(互いに素であるかの判定)。

const A = new Set(['a', 'b', 'c']);
const B = new Set(['b', 'c', 'd']);

// A と B に共通の要素が全くないかを確認
let answer = A.isDisjointFrom(B);
// 結果: false ('b' と 'c' が共通しているため)