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

JavaScript中如何将JSON响应合并到已初始化对象仅覆盖同名字段

JavaScript对象定向覆盖实现方案

你的需求本质是仅对Y对象已有的属性,用X对象的同名属性值覆盖,完全不新增X独有的属性,原生JS可以非常简单的实现,不需要复杂的自定义映射逻辑。

浅覆盖实现(一级属性直接替换)

如果你的属性都是一级,或者嵌套对象允许直接整体替换,用几行代码即可实现:

// 遍历Y的所有自有属性,仅覆盖X中存在的同名属性
Object.keys(y).forEach(key => {
  if (x.hasOwnProperty(key)) {
    y[key] = x[key]
  }
})

该方法直接修改原Y对象,性能极高,即使属性数量很多也不会有性能问题。

深度合并实现(嵌套对象递归合并)

如果你需要保留Y的嵌套对象结构,只递归覆盖嵌套内部的同名属性,可以用递归实现:

function mergeTargetBySource(target, source) {
  Object.keys(target).forEach(key => {
    // 源对象不存在该属性直接跳过
    if (!source.hasOwnProperty(key)) return
    const targetVal = target[key]
    const sourceVal = source[key]
    // 两边都是非null对象时递归合并
    if (typeof targetVal === 'object' && targetVal !== null && typeof sourceVal === 'object' && sourceVal !== null) {
      mergeTargetBySource(targetVal, sourceVal)
    } else {
      // 其他情况直接覆盖
      target[key] = sourceVal
    }
  })
}

// 调用方法,直接修改原y对象
mergeTargetBySource(y, x)

补充说明

  • 如果需要保留原Y对象不被修改,可以先对Y做深拷贝后再执行上述合并逻辑。
  • 如果有特殊覆盖规则(比如X的属性值为null/undefined时不覆盖),在赋值前增加对应判断条件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 06:00:00