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

JavaScriptでオブジェクト内の配列から特定のキー値を検索して取得する方法

以下のようなJSONオブジェクトがあると仮定します。各キー(カテゴリ名)には、productId を持つオブジェクトの配列が格納されています。

const obj = {
    "LAPTOP": [{
        "productId": "123"
    }],
    "DESKTOP": [{
        "productId": "456"
    }],
    "MOUSE": [{
        "productId": "789"
    }, {
        "productId": "012"
    }],
    "KEY-BOARD": [{
        "productId": "345"
    }]
};

要件

このようなオブジェクトを第1引数として受け取り、キーと値のペア(オブジェクト)を第2引数として受け取るJavaScript関数を作成する必要があります。

キーと値のペアとは、基本的に次のようなオブジェクトのことです。

const pair = {"productId": 456};

作成する関数は、指定された productId に一致する要素が含まれているキーをオブジェクト全体から検索し、そのキーを返すものとします。

実装例

実際のコードは以下の通りです。

const obj = {
    "LAPTOP": [{
        "productId": "123"
    }],
    "DESKTOP": [{
        "productId": "456"
    }],
    "MOUSE": [{
        "productId": "789"
    }, {
        "productId": "012"
    }],
    "KEY-BOARD": [{
        "productId": "345"
    }]
};
const searchByPair = (obj = {}, pair = {}) => {
    const toSearch = Object.values(pair)[0];
    let required = undefined;
    Object.keys(obj).forEach((key) => {
        if(obj[key].find((pid) => pid.productId === toSearch)){
            required = key;
        }
    });
    return required;
};
console.log(searchByPair(obj, {
    'productId': '123'
}));

コードの解説

  • Object.values(pair)[0]:検索対象となる値(ここでは productId の値)をペアオブジェクトから取り出します。
  • Object.keys(obj).forEach(...):元のオブジェクトのすべてのキーを順番に走査します。
  • Array.prototype.find():各キーに紐づく配列の中に、指定された productId と一致する要素が存在するかどうかを確認します。
  • 一致する要素が見つかった場合は、そのキーを変数 required に保存し、最終的にその値を返します。

出力結果

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

LAPTOP

このように searchByPair 関数を使えば、ネストされたオブジェクト構造の中から、特定の値を持つキーを簡単に特定できます。なお、複数のキーが同じ値を持つ可能性がある場合は、forEach の代わりに reducefilter を活用して、一致するすべてのキーを配列として取得する方法も検討するとよいでしょう。

  1. JavaScriptのオブジェクト配列に配列メソッドを適用する方法

    JavaScriptでは、オブジェクトが格納された配列に対しても、通常の配列と同じようにpop()、push()、splice()などの標準的な配列メソッドをそのまま使用できます。オブジェクト配列はあくまで「配列」であるため、要素としてオブジェクトが入っていても配列操作のAPIは共通で動作します。 コード例 以下は、JavaScriptオブジェクトの配列に対して配列メソッドを使用するサンプルコードです。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8

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

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