3

これは、以前の質問の更新です ネストされた json オブジェクトの検索と更新

サンプルデータ

TestObj = {
    "Categories": [{
        "Products": [{
            "id": "a01",
            "name": "Pine",
            "description": "Short description of pine."
        },
        {
            "id": "a02",
            "name": "Pine",
            "description": "Short description of pine."
        },
        {
            "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."
    }]
};

私の機能

function getObjects(obj, key, val, newVal) {
    var newValue = newVal;
    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, newValue));
        } else if (i == key && obj[key] == val) {
            obj[key] = newValue;
        }
    }
    return obj;
}

と呼ばれる

getObjects(TestObj, 'id', 'A', 'B');

ID を更新する場合は問題なく動作します。id には重複がないため。しかし、名前を更新すると、キーと値のペアに一致するすべてのデータが更新されます。しかし、それを特定のキーペア値に制限する方法。

更新範囲を制限する関数に何を提供し、それを実装する方法を教えてください。私を助けてください。

注:操作するjsonは動的に生成されるため、関数にハードコードされた値を含めることはできません

4

1 に答える 1