JavaScriptでのオブジェクトの同値判定
JavaScriptでオブジェクトのプロパティが同一であることを判定したくなった。
具体的には,Web API経由で取得したデータをオブジェクトにそのまま格納し,それがフォームの入力と比較して,デフォルト値から変更されたかどうかで,ボタンの有効・無効を切り替えるなどの判定で必要になった。
JavaScriptは論理値,数値,文字列以外,基本的に全てオブジェクトであり,オブジェクト同士を等価演算子 (===
) で比較すると,それはメモリーのアドレス同士の比較になってしまい,オブジェクトのプロパティの比較にならない。
Javaのequalsメソッド相当のものがあれば簡単なのだが,どうやら標準ではそのようなものはないらしい。
そこで,自分で実装したので実装例を紹介する。GitHubでも公開している。
シンプルな関数で,引数に比較したいオブジェクトを2個指定して実行する。オブジェクト以外のプリミティブ型にも対応している。
実装は,オブジェクトのプロパティを1個ずつ比較していき,プロパティにオブジェクトがあれば,再帰するという愚直な実装になっている。
JavaScriptでのオブジェクトの同値判定は頻出処理に思うので,こちらで記した内容をいろいろ使いまわしたい。
リンク