[英]angular 2 - how do I iterate through a JSON response that contains an object which contains an array of objects?
[英]How to search through an array of objects inside a JSON object for a string and return the object that contains it?
我在这个SO答案中找到的搜索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;
}
getObjects(obj, key, val);
我该如何扩展它以返回包含匹配的对象/值/对的对象,而不仅仅是匹配本身? (jQuery或JS)
例如,我需要检查键Event
(或Event[#text]
)的值“ Delivered,Front Door / Porch”是否存在,如果存在,则需要在找到该Event
对象中找到EventDate
。
{
"TrackResponse": {
"TrackInfo": {
"@attributes": {
"ID": "9470111699000308312927"
},
"GuaranteedDeliveryDate": {
"#text": "September 9, 2015"
},
"TrackSummary": {
"EventTime": {
"#text": "2:06 pm"
},
"EventDate": {
"#text": "September 10, 2015"
},
"Event": {
"#text": "Delivered, Front Door/Porch"
},
...
},
"TrackDetail": [{
"EventTime": {
"#text": "8:07 am"
},
...
}, ... {
"EventTime": {},
...
}]
}
}
}
终于通过以下功能使用了此功能:
function ContainsKeyValue(obj, key, value) {
if (obj[key] === value) return true;
for (all in obj) {
if (obj[all] != null && obj[all][key] === value) {
return true;
}
if (typeof obj[all] == "object" && obj[all] != null) {
var found = ContainsKeyValue(obj[all], key, value);
if (found == true) return true;
}
}
return false;
}
for (var eventType in historyDates) {
for (var i = 0; i < trackingDetails.length; i++) {
var detail = trackingDetails[i];
if (ContainsKeyValue(detail, "#text", eventType)) {
historyDates[eventType] = detail.EventDate["#text"];
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.