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

如何为API返回的动态嵌套对象添加value/scale计算结果属性

问题解答

    1. 是否需要映射为新对象:
      如果你的业务场景不需要保留原始API返回的纯净数据,可以直接在原对象上修改;如果需要避免修改原始返回值产生副作用,建议先深拷贝原对象再做处理即可,不需要全量手动映射结构。
    1. 动态结构下的实现方案:
      可以用递归遍历的方式处理,不需要预设结构规则,只要判断当前遍历的对象同时存在value和scale属性,就计算result写入即可,过程中可以用Object.values遍历所有对象值,不受动态键名影响。
    1. 自动处理的实现方式:
      把API调用和后续的处理逻辑封装成统一的请求方法,每次调用该方法获取API返回值后,自动执行递归处理逻辑再返回结果即可。

实现代码

1. 递归处理函数

// 递归处理对象,添加result属性
function addResultProp(obj) {
  // 非对象类型直接返回
  if (typeof obj !== 'object' || obj === null) return obj
  // 检查当前对象是否同时有scale和value属性
  if (obj.hasOwnProperty('scale') && obj.hasOwnProperty('value')) {
    // 避免除零错误
    obj.result = obj.scale === 0 ? 0 : obj.value / obj.scale
  }
  // 遍历所有属性递归处理
  Object.values(obj).forEach(val => addResultProp(val))
  return obj
}

2. 封装API调用自动处理

// 封装统一的API调用方法
async function callApiWithResult(...args) {
  const rawData = await callApi(...args)
  // 如果需要保留原数据,先深拷贝再处理:const processedData = addResultProp(JSON.parse(JSON.stringify(rawData)))
  const processedData = addResultProp(rawData)
  return processedData
}

// 使用示例
const targetObj = await callApiWithResult(/* 原API调用参数 */)

如果你需要保留原始API返回数据不被修改,只需要把注释里的深拷贝逻辑放开即可,深拷贝可以根据你的场景选择JSON.parse(JSON.stringify())或者第三方工具库的深拷贝方法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:45:02