You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中高效查找嵌套JSON内首个SEARCH事件的Interest值

问题描述

我从API接口获取到如下JSON响应数据,该数据包含多个session节点,每个session节点下又包含多个event节点。我需要按顺序找到任意session中第一个type为"SEARCH"的event,若找到则提取该event下arbitraryData节点中的interest值。

目前我通过多层for循环实现了部分逻辑,但认为这种方式不够高效。

现有实现代码

var guestJson = await response.json(); 
for(var property in guestJson)
{                    
    if(property === "sessions")
    {                          
        var sessionObj = JSON.parse(JSON.stringify(guestJson[property]))
        for(var i=0; i< sessionObj.length; i++)
        {   
            var eachSessionObj = JSON.parse(JSON.stringify(sessionObj[i]))  
            
            for(var sessionProperty in eachSessionObj)                
            {                                    
                if(sessionProperty === "events")
                {
                    console.log("Events Found")
                    //console.log(sessionProperty)
                }
            }                              
        }
    }                  
}

JSON数据结构

{
     "firstName":"fn",
     "lastName":"ln",
     "gender":"male",
     "sessions":[
  {
     "currency":"USD",
     "events":[
        {
           "type":"SEARCH",
           "status":"PROCESSED",
           "arbitraryData":{
              "interest":"Health"
           }
        },
        {
           "type":"CHECK",
           "status":"PROCESSED",
           "arbitraryData":{
              "interest":"Dental"
           }
        }
     ]
  },
  {
     "currency":"USD",
     "events":[
        {
           "type":"SEARCH",
           "status":"PROCESSED",
           "arbitraryData":{
              "interest":"Health"
           }
        },
        {
           "type":"CHECK",
           "status":"PROCESSED",
           "arbitraryData":{
              "interest":"Dental"
           }
        }
     ]
  }
]
}

优化实现方案

可以利用数组的find()和some()方法实现高效查找,一旦找到目标就立即终止遍历,避免不必要的循环:

const guestJson = await response.json();
let targetInterest = null;

// 遍历sessions,找到第一个包含SEARCH类型event的session
guestJson.sessions.some(session => {
    // 在当前session的events中查找第一个SEARCH类型的event
    const searchEvent = session.events.find(event => event.type === "SEARCH");
    if (searchEvent) {
        targetInterest = searchEvent.arbitraryData.interest;
        return true; // 找到后终止后续遍历
    }
    return false;
});

// 输出结果
if (targetInterest) {
    console.log("提取到的interest值:", targetInterest);
} else {
    console.log("未找到符合条件的SEARCH类型event");
}

优化点说明

  • 直接访问guestJson.sessions,无需用for...in遍历所有对象属性
  • 用find()和some()方法实现短路遍历,找到目标后立即停止,避免无效循环
  • 移除了原代码中多余的JSON.parse(JSON.stringify())深拷贝操作,直接操作原对象即可

内容的提问来源于stack exchange,提问作者Jey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:40:21