tôi đã sử dụng mã này để tìm phần yêu cầu từ các đối tượng json từ sJhonny's QuestionTìm và cập nhật trong đối tượng json lồng nhau
dữ liệu mẫu
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."
}]
};
Chức năng tìm
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;
}
Sử dụng như như vậy:
getObjects(TestObj, 'id', 'A'); // Returns an array of matching objects
Mã này là để chọn đoạn phù hợp từ nguồn. Nhưng những gì tôi muốn là cập nhật đối tượng nguồn với giá trị mới và truy xuất đối tượng nguồn được cập nhật.
Tôi muốn một cái gì đó giống như
getObjects(TestObj, 'id', 'A', 'B'); // Returns source with updated value. (ie id:'A' updated to id:'B' in the returned object)
Mã của tôi
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;
}
này hoạt động nếu tôi cho obj[key] = 'qwe';
nhưng nếu tôi thay đổi mã vào obj[key] = newValue;
cập nhật của nó như là không xác định.
Tại sao vậy?
obj [key] = newVal? – Virus721
nếu không, nếu có điều kiện? – Okky
Tôi không nhận được những gì bạn muốn làm. Bạn có muốn cập nhật đối tượng nguồn cùng một lúc khi bạn truy xuất một phần của nó không? oO – Virus721