JavaScript中如何根据condition键匹配Data并生成指定响应对象?
实现动态匹配嵌套对象的键值生成响应对象
需求明确:给定动态可变的condition对象和多层嵌套的Data对象,遍历condition的所有键,在Data中查找对应键的取值,若两者值一致则保留该值,不一致则使用condition的原值,最终生成response对象。
核心实现步骤
- 递归查找嵌套对象的键值:由于
Data是多层嵌套结构,需要递归遍历所有层级,找到目标键对应的值。 - 遍历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
相关产品推荐
相关产品推荐

