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

JavaScript中如何根据condition键匹配Data并生成指定响应对象?

实现动态匹配嵌套对象的键值生成响应对象

需求明确:给定动态可变的condition对象和多层嵌套的Data对象,遍历condition的所有键,在Data中查找对应键的取值,若两者值一致则保留该值,不一致则使用condition的原值,最终生成response对象。

核心实现步骤

  1. 递归查找嵌套对象的键值:由于Data是多层嵌套结构,需要递归遍历所有层级,找到目标键对应的值。
  2. 遍历condition生成响应:逐个处理condition的每个键,对比Data中找到的值与condition原值,决定最终存入response的内容。

完整代码实现

// 递归查找嵌套对象中指定键的值
function findValueInNestedObject(obj, key) {
  for (const [k, v] of Object.entries(obj)) {
    if (k === key) {
      return v;
    }
    // 递归遍历嵌套对象(排除null,因为typeof null === 'object')
    if (typeof v === 'object' && v !== null) {
      const foundValue = findValueInNestedObject(v, key);
      if (foundValue !== undefined) {
        return foundValue;
      }
    }
  }
  // 找不到对应键时返回undefined
  return undefined;
}

// 示例数据
let condition = {
  "velocity_global_sync": true, 
  "allowSync": false
};

let Data = {
  "organization_id": 4002400004,
  "organization_name": "Velocity Global Integration Sandbox",
  "payload": {
    "offer": {
      "application_id": 34587141004,
      "allowSync": true,
      "custom_fields": {
        "velocity_global_sync": {
          "name": "Velocity Global Sync",
          "type": "boolean",
          "value": true
        }
      },
      "id": 4555342004
    }
  }
};

// 生成最终的response对象
const response = {};
for (const [key, conditionVal] of Object.entries(condition)) {
  const dataVal = findValueInNestedObject(Data, key);
  // 严格相等判断,避免类型不同的误匹配(比如true和1)
  response[key] = dataVal === conditionVal ? dataVal : conditionVal;
}

console.log(response);

代码说明

  • 递归函数findValueInNestedObject会遍历Data的所有层级,返回第一个匹配到的键对应的值;未找到则返回undefined。
  • 遍历condition时,用===做严格相等判断,确保类型和数值都一致才使用Data中的值,否则沿用condition的原值。
  • 运行代码后输出的response与期望结果一致:
    {
      "velocity_global_sync": true,
      "allowSync": false
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:05:20