JavaScript 逆引き集 | Set の基本

JavaScript JavaScript
スポンサーリンク

Set の基本 — new Set(arr)

JavaScript の Set は「重複を許さない値の集合」を扱うための組み込みオブジェクトです。配列と似ていますが、同じ値を二度入れることはできません。順序は追加した順に保持されます。


基本の使い方

// 配列からSetを作成
const s = new Set([1, 2, 3, 3, 2]);

console.log(s);        // Set(3) { 1, 2, 3 }
console.log(s.size);   // 3(重複は自動的に除外)
JavaScript
  • new Set(iterable): 配列や文字列など反復可能なものから集合を作る。
  • size: 要素数を返す(配列の length に相当)。

よく使うメソッド

  • add(value): 値を追加(重複は無視)
  • delete(value): 値を削除
  • has(value): 値が含まれているか判定
  • clear(): 全削除
  • for…of / forEach: 繰り返し処理
const s = new Set();
s.add("apple");
s.add("banana");
s.add("apple"); // 重複は無視

console.log(s.has("apple")); // true
s.delete("banana");
console.log(s.size);         // 1
JavaScript

すぐ使えるテンプレート集

1) 配列の重複を除去

const arr = [1, 2, 2, 3, 3, 3];
const unique = [...new Set(arr)];
console.log(unique); // [1, 2, 3]
JavaScript

2) 集合演算(和集合・積集合・差集合)

const a = new Set([1, 2, 3]);
const b = new Set([3, 4]);

// 和集合
const union = new Set([...a, ...b]); // {1,2,3,4}

// 積集合
const intersection = new Set([...a].filter(x => b.has(x))); // {3}

// 差集合
const difference = new Set([...a].filter(x => !b.has(x))); // {1,2}
JavaScript

3) 文字列のユニーク文字を抽出

const str = "banana";
const chars = [...new Set(str)];
console.log(chars); // ["b","a","n"]
JavaScript

4) 繰り返し処理

const s = new Set(["red", "blue", "green"]);
for (const color of s) {
  console.log(color);
}
JavaScript

実務で便利なパターン

  • 重複排除: ユーザー入力やリストからユニーク値を抽出。
  • 高速検索: has は O(1) で判定できるため、配列より効率的。
  • 集合演算: タグや権限の比較に便利。
// ユーザー権限の比較
const userRoles = new Set(["read", "write"]);
const required = new Set(["read", "admin"]);

const hasAll = [...required].every(r => userRoles.has(r));
console.log(hasAll); // false
JavaScript

よくある落とし穴と対策

  • 順序は保持されるがインデックスアクセス不可: s[0] は使えない。
    → 対策: [...s][0] のように配列に展開してアクセス。
  • オブジェクトは参照で判定: {x:1}{x:1} は別物。
    → 対策: 同じ参照を使うか、キー化して比較。
  • JSON化できない: JSON.stringify(new Set([1,2])){}
    → 対策: [...s] で配列に変換してから。

練習問題(手を動かして覚える)

// 1) 配列の重複を除去
const arr = ["apple","banana","apple","orange"];
console.log([...new Set(arr)]); // ["apple","banana","orange"]

// 2) 和集合・積集合・差集合
const A = new Set([1,2,3]);
const B = new Set([2,3,4]);
console.log(new Set([...A,...B])); // 和集合 {1,2,3,4}
console.log(new Set([...A].filter(x=>B.has(x)))); // 積集合 {2,3}
console.log(new Set([...A].filter(x=>!B.has(x)))); // 差集合 {1}

// 3) 文字列からユニーク文字
console.log([...new Set("hello")]); // ["h","e","l","o"]
JavaScript

直感的な指針

  • 重複を消したい: new Set(arr)[...new Set(arr)]
  • 存在チェック: s.has(value) は高速。
  • 集合演算: スプレッド+filterで簡単に。
  • 配列に戻す: [...s] で展開。

タイトルとURLをコピーしました