Setオブジェクトとは
セットオブジェクトには以下の特徴があります。
- 値が一意であることが保証されている
- 順序を持たず、インデックスでアクセスできない
値が一意であることが保証されている
以下のコードは、Setオブジェクトを使用して一意な値のコレクションを作成し、その動作を示しています。
// Setオブジェクトの作成
const mySet = new Set();
// 値の追加
mySet.add(1);
mySet.add(2);
mySet.add(3);
mySet.add(1); // 既に1が含まれているため、無視される
// サイズの確認
console.log("セットのサイズ:", mySet.size); // 出力: セットのサイズ: 3
// 値の重複が無視されることを確認
console.log("セット内の値:", mySet); // 出力: セット内の値: Set(3) { 1, 2, 3 }
// 値の比較は厳密な等価性で行われることを確認
console.log("1がセットに含まれているか:", mySet.has(1)); // 出力: 1がセットに含まれているか: true
console.log("文字列の'1'がセットに含まれているか:", mySet.has("1")); // 出力: 文字列の'1'がセットに含まれているか: false
このコードでは、最初に空のSetオブジェクトを作成し、それにいくつかの値を追加しています。その際、同じ値が複数回追加されている場合でも、重複する値は無視されます。また、値の比較には厳密な等価性が使用されるため、異なるデータ型や厳密に等しいでない値はセット内で一意なものとして扱われます。
順序を持たず、インデックスでアクセスできない
Setオブジェクトは、要素の順序を保持しないデータ構造です。つまり、要素が追加された順序で格納されるわけではなく、Set内の要素は自動的にソートされることもありません。そのため、Setオブジェクトではインデックスを使用して要素にアクセスすることはできません。
例えば、次のようにSetオブジェクトを使用していくつかの要素を追加した場合を考えてみましょう。
const mySet = new Set();
mySet.add("apple");
mySet.add("banana");
mySet.add("orange");
このとき、mySet
内の要素の順序は["apple", "banana", "orange"]
という順序である保証はありません。要素が追加された順序を保持することはありません。そのため、インデックスを使用してmySet
内の要素にアクセスすることはできません。
代わりに、Setオブジェクトのメソッド(例: has
, add
, delete
など)を使用して要素を操作します。また、Set内の要素を反復処理するためには、forEach
やfor...of
などの反復処理構文を使用することが一般的です。