1. ホーム
  2. jquery

JSONオブジェクトに対してjQueryのfind()を使用する

2023-10-24 17:15:17

質問

類似の brnwdrng さんの質問 私はJSONのようなオブジェクトを検索する方法を探しています。

私のオブジェクトの構造が次のようであると仮定します。

TestObj = {
    "Categories": [{
        "Products": [{
            "id": "a01",
            "name": "Pine",
            "description": "Short description of pine."
        },
        {
            "id": "a02",
            "name": "Birch",
            "description": "Short description of birch."
        },
        {
            "id": "a03",
            "name": "Poplar",
            "description": "Short description of poplar."
        }],
        "id": "A",
        "title": "Cheap",
        "description": "Short description of category A."
    },
    {
        "Product": [{
            "id": "b01",
            "name": "Maple",
            "description": "Short description of maple."
        },
        {
            "id": "b02",
            "name": "Oak",
            "description": "Short description of oak."
        },
        {
            "id": "b03",
            "name": "Bamboo",
            "description": "Short description of bamboo."
        }],
        "id": "B",
        "title": "Moderate",
        "description": "Short description of category B."
    }]
};

id="A"を持つオブジェクトを取得したい。

などなど、いろいろ試してみました。

$(TestObj.find(":id='A'"))

が、何も動作しないようです。

each'を使わずに、ある基準に基づいて項目を取得する方法を誰か思いつかないでしょうか?

どのように解決するのですか?

jQueryは、プレーンなオブジェクトリテラルでは動作しません。以下の関数は、オブジェクト内の深さに関係なく、すべての 'id' (または他のプロパティ)を検索するために、同様の方法で使用することができます。

function getObjects(obj, key, val) {
    var objects = [];
    for (var i in obj) {
        if (!obj.hasOwnProperty(i)) continue;
        if (typeof obj[i] == 'object') {
            objects = objects.concat(getObjects(obj[i], key, val));
        } else if (i == key && obj[key] == val) {
            objects.push(obj);
        }
    }
    return objects;
}

のように使う。

getObjects(TestObj, 'id', 'A'); // Returns an array of matching objects