JavaScriptでオブジェクトや配列に特定のキー・要素が存在するか確認する方法
JavaScriptでは、オブジェクトや配列の中に特定のキーや値が存在するかどうかを確認する方法がいくつかあります。まずはオブジェクトの場合から見ていきましょう。
in演算子を使ってオブジェクトのキーを確認する
オブジェクトに特定のキーが存在するかどうかを調べるには、in 演算子を使用します。
例
let obj = {
name: "John",
age: 22
}
console.log('name' in obj);
console.log('address' in obj);出力結果
true false
注意: in 演算子は、指定されたプロパティがそのオブジェクト自身、またはプロトタイプチェーン上に存在する場合に true を返します。継承されたプロパティまで含めて判定したい場合に便利です。
なお、オブジェクト自身が持つプロパティのみを厳密にチェックしたい場合は、Object.hasOwn(obj, 'name') や obj.hasOwnProperty('name') を使うとより正確です。
indexOfメソッドを使って配列の要素を確認する
次に、配列内に特定の要素が存在するかどうかを確認する場合は、配列の indexOf メソッドを使用します。要素が見つからない場合は -1 が返され、見つかった場合はそのインデックス番号が返されます。
例
let arr = ["test", 1, 2, "hello", 23.5];
console.log(arr.indexOf({}))
console.log(arr.indexOf("hello"))
console.log(arr.indexOf(23.5))出力結果
-1 3 4
最初の例で空のオブジェクト {} を渡した場合に -1 が返されるのは、オブジェクトは参照型であり、比較は参照(同一性)によって行われるためです。内容が同じでも別のオブジェクトインスタンスであれば一致しない点に注意してください。
また、ES2016以降では includes() メソッドを使うことで、より直感的に真偽値で存在チェックを行うこともできます。例えば arr.includes("hello") のように書くだけで true / false が得られます。
-
JavaScriptで元の配列を変更せずにオブジェクトのキー名を変更する方法
JavaScriptで配列内のオブジェクトのキー名(プロパティ名)を変更したい場合、deleteで直接削除してしまうと元のオブジェクトまで書き換わってしまいます。そこで役立つのが、map()メソッドとスプレッド構文(...)、分割代入を組み合わせたイミュータブル(非破壊的)な手法です。この記事では、オブジェクトのキー「name」を「fullName」に変更しながら、元の配列を一切変更しない方法をサンプルコード付きで解説します。サンプルコード<!DOCTYPE html> <html lang="ja"> <head> <meta c
-
【JavaScript】オブジェクトがクラスのインスタンスかどうかを判定する方法
JavaScriptでは、instanceof 演算子を使うことで、あるオブジェクトが特定のクラス(コンストラクタ関数)のインスタンスであるかどうかを簡単に判定できます。instanceof 演算子とは?instanceof 演算子は、左辺のオブジェクトが右辺に指定したコンストラクタ関数のプロトタイプチェーン上に存在するかどうかを評価し、その結果を真偽値(true / false)として返します。この仕組みを利用することで、オブジェクトがどのクラスから生成されたものなのかを実行時に動的にチェックできます。コード例以下は、ボタンをクリックしたときに student1 オブジェクトが Studen