JavaScriptで2つのオブジェクトを比較し、共通の値を持つキーの配列を取得する方法
JavaScriptでは、2つのオブジェクトを受け取り、両方のオブジェクトに存在し、かつ同じ値を持つキーだけを抽出して配列として返す関数が必要になることがあります。
このような処理は、Object.keys()とfilter()を組み合わせることで、シンプルかつ効率的に実装できます。以下に具体的な実装例を紹介します。
実装例
まず、比較対象となる2つのオブジェクトを用意します。その後、アロー関数を使って共通キーを判定する処理を記述します。
const obj1 = { a: true, b: false, c: "foo" };
const obj2 = { a: false, b: false, c: "foo" };
const compareObjects = (obj1 = {}, obj2 = {}) => {
const common = Object.keys(obj1).filter(key => {
if(obj1[key] === obj2[key] && obj2.hasOwnProperty(key)){
return true;
};
return false;
});
return common;
};
console.log(compareObjects(obj1, obj2));
コードの解説
Object.keys(obj1)で1つ目のオブジェクトのすべてのキーを配列として取得し、filter()メソッドで条件に合うキーのみを絞り込みます。各キーについて以下の2つの条件をチェックしています。
obj1[key] === obj2[key]: 厳密等価演算子(===)により、両オブジェクトで値が完全に一致しているかを確認します。obj2.hasOwnProperty(key): 2つ目のオブジェクトがそのキーを直接持っているかどうかを確認し、プロトタイプチェーン上のプロパティを誤って判定しないようにします。
この例では、キー a の値は true と false で異なるため除外され、キー b(どちらも false)とキー c(どちらも "foo")が一致しています。
出力結果
コンソールには次のように表示されます。
['b', 'c']
このように、厳密等価演算子とhasOwnProperty()を組み合わせたフィルタリング処理により、2つのオブジェクト間で「同じキー・同じ値」を持つ要素だけを正確に取り出すことができます。
-
JavaScriptのArray.values()メソッドとは?使い方とサンプルコードを徹底解説
JavaScriptのArray.values()メソッドとは? JavaScriptのArray.values()メソッドは、対象の配列に含まれるすべての値を格納したイテレーターオブジェクトを返します。ES2015(ES6)以降で利用可能なこのメソッドは、for...ofループやスプレッド構文([...arr])と組み合わせることで、配列の各要素を効率的に取り出せます。 なお、keys()やentries()がインデックス情報も一緒に返すのに対し、values()は純粋に「値」だけを順番に提供する点が大きな特徴です。 基本構文 arr.values() 引数は不要で、戻り値として新しいArr
-
JavaScriptで2つのオブジェクトを比較しながら配列のネストされた値をグループ化する方法
この記事では、2つのオブジェクト(before と after)を比較しながら、ネストされた配列の値を1つの行にグループ化する方法を解説します。データの差分を表形式で整理したい場合などに役立つテクニックです。入力データの例まず、次のようなJSONオブジェクトがあるとします。before(変更前)と after(変更後)の2つの状態が含まれ、それぞれの device 配列の中に、id、price、features(機能名と価格)というネストされた構造を持っています。const input = { before: { device: [ { id: 1234