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

如何用优雅易懂的JavaScript代码实现嵌套JSON数组的状态查询?

优化JSON状态判断代码的优雅实现方式

待搜索的JSON

{ "results": 
  { "key1": 
    [ { "step": "step1", "result": "pass"    } 
    , { "step": "step2", "result": "pending" } 
    ] 
  } 
, "key2": 
  [ { "step": "step3", "result": "pass"    } 
  , { "step": "step4", "result": "pending" } 
  ] 
}   

需求说明

输入一个key,需针对该key返回对应状态:

  • 若所有步骤的result=pass,则返回status=pass;
  • 若存在任意步骤的result=fail,则返回fail;
  • 若不存在fail但存在pending,则返回pending。

现有可行实现代码

let subState              = "key1";
let validationResultsJson = validationReportJson["results"];
let validationKeys        = Object.keys(validationResultsJson);
if (validationKeys.includes(subState)) {
    let subStateArr = Object.values(validationResultsJson[subState]);
    let result      = '';
    for (let eachStep of subStateArr) {
        result += eachStep.result;
    }
    if (result.indexOf("fail") > -1) {
        console.log("fail");
    } else if (result.indexOf("pending") > -1) {
        console.log("pending");
    } else {
        console.log("pass");
    }
} else {
    console.error("subState doesn't exist");
}

更优雅易懂的实现方案

const subState = "key1";
const validationResults = validationReportJson.results;

// 检查目标key是否存在
if (!validationResults.hasOwnProperty(subState)) {
    console.error("subState doesn't exist");
    return;
}

const steps = validationResults[subState];

// 优先判断是否存在失败步骤(优先级最高)
if (steps.some(step => step.result === "fail")) {
    console.log("fail");
    return;
}

// 再判断是否存在待处理步骤
if (steps.some(step => step.result === "pending")) {
    console.log("pending");
    return;
}

// 所有步骤都通过
console.log("pass");

优化亮点

  1. 逻辑清晰直观:严格按照需求的优先级(fail > pending > pass)依次判断,代码流程和业务规则完全对应,一眼就能看懂
  2. 语义化方法使用:用数组原生的some方法替代字符串拼接查找,steps.some(step => step.result === "fail")直接表达“是否有步骤失败”,逻辑更直白
  3. 减少嵌套层级:每满足一个条件就直接返回,避免多层if-else嵌套,代码结构更扁平
  4. 变量命名简洁:简化了冗长的变量名,比如validationResults、steps,提升可读性
  5. 高效的存在性检查:用hasOwnProperty直接判断key是否存在,比先取keys再判断包含关系更高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:27:24