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

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 の値は truefalse で異なるため除外され、キー b(どちらも false)とキー c(どちらも "foo")が一致しています。

出力結果

コンソールには次のように表示されます。

['b', 'c']

このように、厳密等価演算子とhasOwnProperty()を組み合わせたフィルタリング処理により、2つのオブジェクト間で「同じキー・同じ値」を持つ要素だけを正確に取り出すことができます。

  1. JavaScriptのArray.values()メソッドとは?使い方とサンプルコードを徹底解説

    JavaScriptのArray.values()メソッドとは? JavaScriptのArray.values()メソッドは、対象の配列に含まれるすべての値を格納したイテレーターオブジェクトを返します。ES2015(ES6)以降で利用可能なこのメソッドは、for...ofループやスプレッド構文([...arr])と組み合わせることで、配列の各要素を効率的に取り出せます。 なお、keys()やentries()がインデックス情報も一緒に返すのに対し、values()は純粋に「値」だけを順番に提供する点が大きな特徴です。 基本構文 arr.values() 引数は不要で、戻り値として新しいArr

  2. JavaScriptで2つのオブジェクトを比較しながら配列のネストされた値をグループ化する方法

    この記事では、2つのオブジェクト(before と after)を比較しながら、ネストされた配列の値を1つの行にグループ化する方法を解説します。データの差分を表形式で整理したい場合などに役立つテクニックです。入力データの例まず、次のようなJSONオブジェクトがあるとします。before(変更前)と after(変更後)の2つの状態が含まれ、それぞれの device 配列の中に、id、price、features(機能名と価格)というネストされた構造を持っています。const input = { before: { device: [ { id: 1234