で更新私は見つけ、ネストされたJSONオブジェクト
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;
}
使用などを見つけることがsJhonny's Question
データサンプル
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."
}]
};
機能からJSONオブジェクトから必要な部分を見つけるために、このコードを使用しましたso:
getObjects(TestObj, 'id', 'A'); // Returns an array of matching objects
このコードは、ソースから一致する部分を選択することです。しかし、私が望むのは、新しい値でソースオブジェクトを更新し、更新されたソースオブジェクトを取得することです。
は、私は私がobj[key] = 'qwe';
を与える場合、これは動作します
getObjects(TestObj, 'id', 'A', 'B'); // Returns source with updated value. (ie id:'A' updated to id:'B' in the returned object)
私のコード
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));
} else if (i == key && obj[key] == val) {
obj[key] = 'qwe';
}
}
return obj;
}
のような何かをしたいが、私はobj[key] = newValue;
にコードを変更した場合、そのは未定義のように更新します。
なぜそうですか?
OBJ [キー] = newValにしてnewValueにを渡すのを忘れて?他の場合は – Virus721
で条件が正しい? – Okky
あなたは何をしたいのか分からない。ソースオブジェクトを取得するのと同時にソースオブジェクトを更新しますか? oO – Virus721