Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在JSON对象内的对象数组中搜索字符串并返回包含该字符串的对象? 问题_Javascript_Jquery_Json - Fatal编程技术网

Javascript 如何在JSON对象内的对象数组中搜索字符串并返回包含该字符串的对象? 问题

Javascript 如何在JSON对象内的对象数组中搜索字符串并返回包含该字符串的对象? 问题,javascript,jquery,json,Javascript,Jquery,Json,搜索我在中找到的JSOn对象的方法工作得很好,但是,我需要它返回包含匹配对象、值或对的对象,而不是匹配对象本身 代码 问题 我如何扩展它以返回包含匹配对象/值/对的对象,而不仅仅是匹配本身?(jQuery或JS) JSON示例 例如,我需要检查keyEvent(或Event[#text])的值“Delivered,Front Door/roach”是否存在,如果存在,我需要在找到Event的对象中查找EventDate { "TrackResponse": { "T

搜索我在中找到的JSOn对象的方法工作得很好,但是,我需要它返回包含匹配对象、值或对的对象,而不是匹配对象本身

代码 问题 我如何扩展它以返回包含匹配对象/值/对的对象,而不仅仅是匹配本身?(jQuery或JS)

JSON示例
例如,我需要检查key
Event
(或
Event[#text]
)的值“Delivered,Front Door/roach”是否存在,如果存在,我需要在找到
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"];
        }
    }
}
函数包含一个值(对象、键、值){
如果(obj[key]==value)返回true;
用于(全部在obj中){
if(obj[all]!=null&&obj[all][key]==value){
返回true;
}
if(对象的类型[all]=“对象”&&obj[all]!=null){
var found=ContainsKeyValue(对象[all],键,值);
if(find==true)返回true;
}
}
返回false;
}
for(historyDates中的var eventType){
对于(var i=0;i
也许你需要从另一个角度来看待它。你说“包含匹配项的对象”,但实际上,该对象就是匹配项。有道理吗?谢谢,我正在调查。我也在查看作为“重复链接”提供的答案,由于该答案相当长,我需要花一点时间来消费和尝试。如果我的问题真的是重复的,我会删除它。不,有时很难找到你要找的东西的确切名称。有一个“路标”问题并没有错,它只是让链接更可行。我只是想帮你解决你的问题,而不是复制材料。但是如果没有帮助的话,我可以重新打开它。是的,像这样的帖子仍然会出现在搜索中,让人们更容易找到社区认可的答案。没什么好担心的。@AndreBulatov-那么,对于你的确切情况,你只是在寻找一次约会吗?例如,链接的材质可以这样使用:
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"];
        }
    }
}