JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptのSetでオブジェクトを検索する方法(hasメソッドの使い方)

Setのhasメソッドによる要素の検索

JavaScriptのSetクラスには、セット内に指定した要素が存在するかどうかを調べるためのhasメソッドが用意されています。

数値や文字列などのプリミティブ値は値そのもので比較されますが、オブジェクトを検索する場合は注意が必要です。同じ内容を持つオブジェクトでも、メモリ上の参照(アドレス)が異なれば別のオブジェクトとして扱われます。つまり、hasメソッドでオブジェクトを検索するには、セットに追加したときと同じオブジェクトへの参照を渡す必要があります。

サンプルコード

let mySet = new Set();
let myObj = {name: "John"};

mySet.add(1);
mySet.add(3);
mySet.add("a");
mySet.add(myObj);

console.log(mySet);
console.log(mySet.has(myObj));

// 内容は同じでも別の新しいオブジェクトとして判定される
console.log(mySet.has({name: "John"}));

実行結果

Set { 1, 3, 'a', { name: 'John' } }
true
false

結果の解説

このコードでは、数値の13、文字列の"a"、そしてオブジェクトmyObjをセットに追加しています。

  • mySet.has(myObj) … 追加したときと同一の参照を持つオブジェクトを渡しているため、trueが返ります。
  • mySet.has({name: "John"}) … 見た目は同じでも新しく生成された別のオブジェクトであり、メモリ上のアドレスが異なるため、falseが返ります。

このように、Setにおけるオブジェクトの比較は「値の等価性」ではなく「同一性(参照の一致)」に基づいて行われます。オブジェクトの中身をもとに検索したい場合は、キーとなる値を文字列として保存するか、Mapや配列を組み合わせるなど、別のアプローチを検討するとよいでしょう。

  1. JavaScriptでオブジェクトの値を動的に設定する方法をわかりやすく解説

    JavaScriptでは、オブジェクトのプロパティ(値)を後から動的に変更・設定することができます。本記事では、ボタンをクリックしたタイミングでオブジェクトの値を書き換える具体的なコード例を紹介します。 実装例:オブジェクトの値を動的に変更する 以下のコードでは、student オブジェクトの name プロパティと age プロパティを、ボタンクリック時に動的に更新しています。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" />

  2. 【JavaScript入門】Symbolを使ってオブジェクトごとに一意のIDを作成する方法

    はじめにJavaScriptでオブジェクトごとに一意のIDを作成したい場合、Symbol()を使うのが最も簡単かつ確実な方法です。Symbolは呼び出されるたびに必ず新しい一意の値を生成するため、たとえ同じ説明文字列を渡しても、二度と同じ値にはなりません。以下は、各オブジェクトに対して一意のIDを作成するサンプルコードです。実装例<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewp