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

在Express中使用_.extend()时,对象字段会被覆盖还是合并?

对象扩展时部分字段赋值的覆盖/新增问题

当将一个对象作为另一个对象的扩展,且仅为部分扩展字段赋值时,原有字段的值会被覆盖还是新增?

示例代码如下:

const PATCH_REQUEST_SCHEMA = {
    'type': 'object',
    'title': 'Some object',
    'description': 'Some object Representation',
    'properties': {
        'name': {
            'type': 'string',
            'minLength': 1,
            'maxLength': 256,
            'title': 'Name'
        }
    }
};

const POST_REQUEST_SCHEMA =  _.extend({}, PATCH_REQUEST_SCHEMA, {
    'properties': {
        'surname': {
            'type': 'string',
            'minLength': 1,
            'maxLength': 256,
            'title': 'Surname'
        }
    }
});

请问POST_REQUEST_SCHEMA.properties的结果会是包含name和surname的对象,还是仅包含surname的对象?


答案

_.extend是浅合并方法,它会直接覆盖目标对象中与源对象同名的属性值,不会递归合并嵌套的子对象。

所以在你的代码中:

  • 原PATCH_REQUEST_SCHEMA的properties是包含name的对象
  • 扩展时传入的第三个参数直接给properties赋值了一个新的仅含surname的对象
  • 最终POST_REQUEST_SCHEMA.properties仅包含surname,原有name被完全覆盖。

如果想要保留原有嵌套属性并新增字段,需要用Lodash的_.merge方法(递归合并嵌套对象),修改后的代码如下:

const POST_REQUEST_SCHEMA =  _.merge({}, PATCH_REQUEST_SCHEMA, {
    'properties': {
        'surname': {
            'type': 'string',
            'minLength': 1,
            'maxLength': 256,
            'title': 'Surname'
        }
    }
});

此时POST_REQUEST_SCHEMA.properties就会同时包含name和surname两个属性。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:05:43