JavaScript PR

JavaScript – Setオブジェクトの使い方を徹底解説!【重複要素の管理から集合演算まで】

記事内に商品プロモーションを含む場合があります

JavaScriptを使う際、
データの重複を管理することが必要になることがあります。
その時に便利なのが、Setオブジェクトです。

Setは、一意な値だけを保持できる特性があり、
効率的にデータを操作するのに役立ちます。

本記事では、
Setオブジェクトの基本的な使い方から応用的な操作まで、
初心者向けにわかりやすく解説していきます!

Setオブジェクトとは?

JavaScriptのSetオブジェクトは、
一意な値を持つデータのコレクションです。
同じ値を複数回追加することはできません。

以下のような特徴があります。

  • 値が一意である
  • 順序を持たず、
    インデックスでのアクセス不可

例えば、
重複する値を自動的に除去したい場合、
Setを使うと効率よくデータを管理できます。

Example:

let mySet = new Set([1, 2, 3, 4]);
console.log(mySet); // Set(4) { 1, 2, 3, 4 }

ここでは、1から4までの一意な値がセットされています。
同じ値が追加された場合は無視されます。

Setオブジェクトの操作

値の追加と削除

Setには値を追加したり削除したりできます。

add()で新しい値を追加し、
delete()で特定の値を削除します。

値を自由に追加したり削除したりすることで、
柔軟なデータ管理が可能です。

let mySet = new Set();
mySet.add(1); // Set(1) { 1 }
mySet.add(2); // Set(2) { 1, 2 }
mySet.delete(1); // Set(1) { 2 }
console.log(mySet); // Set(1) { 2 }

サイズの取得

let set = new Set([1, 2, 3]);
console.log(set.size);    // 3

全値の削除

let mySet = new Set([1, 2, 3]);
console.log(mySet.size);    // 3

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

値の存在確認

Setに特定の値が含まれているかを
確認するためには、has()メソッドを使います。

値が存在するかどうかをすぐに確認できるため、
データの検索処理が効率化されます。

let mySet = new Set([1, 2, 3]);
console.log(mySet.has(2)); // true
console.log(mySet.has(5)); // false


has()を使えば、値の存在を簡単にチェックでき、
無駄な操作を避けることができます。

Setの反復処理

for…of文で値を取り出す

for...of文を使えば、
Set内のすべての値を順番に取得できます。

Setは配列のように、
反復可能なデータ構造なので、
for...ofを使って簡単にループ処理が可能です。

Example:

let mySet = new Set([1, 2, 3]);
for (let value of mySet) {
  console.log(value); // 1, 2, 3
}

for...ofを使うと、
Set内のすべての値にアクセスできるため、
ループ処理が簡単になります。

Set.forEach()を使ったループ処理

SetにもforEach()メソッドがあり、
配列のように各要素に対して処理を実行できます。

forEach()を使うことで、
すべての値に対して一括して操作を行えます。

Example:

mySet.forEach(value => {
  console.log(value); // 1, 2, 3
});

forEach()メソッドは、
よりシンプルにループ処理を記述したいときに便利です。

Setオブジェクトと配列の関係

配列との変換

Setは配列に変換できます。
Array.from()を使うと、
Setの値を配列に変換できます。

配列とSetの変換により、
使い勝手が広がり、
配列操作が必要な場合にも対応できます。

Example:

let mySet = new Set([1, 2, 3]);
let myArray = Array.from(mySet);
console.log(myArray); // [1, 2, 3]


Setを配列に変換することで、
配列専用のメソッドを使ったデータ操作が可能になります。

配列から重複した要素を削除

Setの特性を利用して、
配列から重複要素を削除できます。

重複データを自動的に排除できるため、
手動で重複を確認する必要がなくなります。

Example:

let numbers = [1, 2, 2, 3, 4, 4];
let uniqueNumbers = Array.from(new Set(numbers));
console.log(uniqueNumbers); // [1, 2, 3, 4]

Setを使うと、
配列の重複要素を簡単に取り除くことができます。

Setオブジェクトの応用:集合演算

基本的な集合演算

Setを使って、
和集合、積集合、
差集合などの集合演算ができます。

Setを使った集合演算は、
データを効率的に操作したい場合に非常に便利です。

Example:

let setA = new Set([1, 2, 3]);
let setB = new Set([2, 3, 4]);

// 和集合
let union = new Set([...setA, ...setB]);
console.log(union); // Set { 1, 2, 3, 4 }

// 積集合
let intersection = new Set([...setA].filter(x => setB.has(x)));
console.log(intersection); // Set { 2, 3 }

// 差集合
let difference = new Set([...setA].filter(x => !setB.has(x)));
console.log(difference); // Set { 1 }

Setは集合演算にも活用でき、
データを整理するのに役立ちます。

Setオブジェクトのパフォーマンスと注意事項

パフォーマンス

Setオブジェクトは、
重複する値を排除するため、
効率的にデータを管理できます。

特にデータ量が多い場合、
Setを使うことで重複チェックが自動的に行われ、
パフォーマンスの向上が期待できます。

注意事項

Setは一意な値しか保持しないため、
同じ値を追加しても無視されます。

また、Setは順序を保持しません。

順序が重要な場合には、
配列の使用を検討する必要があります。

まとめ

本記事ではSetについて解説しました!

Setオブジェクトは、
データの重複を管理し、
効率的にデータを操作するために非常に便利なツールです。

値の追加・削除から集合演算まで、
多くの場面で活用できます。

ぜひSetオブジェクトを使ってみましょう!