如何使用Object.assign或其他方法实现嵌套对象属性合并?
实现对象合并的几种方法
嘿,这个需求很容易解决,我给你分享几种实用的实现方式,不管是用Object.assign还是更现代的ES6语法都能轻松达成目标:
方法一:使用Object.assign直接修改原对象
如果可以接受修改原o1对象的meta属性,直接用Object.assign把t1的属性合并进去就行:
let o1 = { meta: { intent: 'i' } }; const t1 = { topic: 't' }; // 将t1的属性合并到o1.meta中 Object.assign(o1.meta, t1); console.log(o1); // 输出:{ meta: { intent: 'i', topic: 't' } }
说明:Object.assign会把后续源对象(这里是t1)的属性复制到目标对象(o1.meta)里,如果有重复属性会覆盖,这里刚好是新增属性,完美契合需求。
方法二:使用Object.assign创建新对象(无副作用)
如果不想修改原有的o1和t1,可以创建一个全新的对象,避免对原始数据产生影响:
let o1 = { meta: { intent: 'i' } }; const t1 = { topic: 't' }; // 生成新的目标对象,原对象保持不变 const result = { meta: Object.assign({}, o1.meta, t1) }; console.log(result); // 输出:{ meta: { intent: 'i', topic: 't' } }
说明:这里先创建一个空对象作为目标,再依次合并o1.meta和t1的属性,最终得到独立的新对象。
方法三:ES6展开运算符(更简洁直观)
现在很多项目都用ES6+的语法,展开运算符...可以让代码更简洁,同样支持创建无副作用的新对象:
let o1 = { meta: { intent: 'i' } }; const t1 = { topic: 't' }; // 用展开运算符合并属性,生成新对象 const result = { meta: { ...o1.meta, ...t1 } }; console.log(result); // 输出:{ meta: { intent: 'i', topic: 't' } }
说明:...o1.meta会把o1.meta的所有属性展开,...t1接着展开t1的属性,两者合并后组成新的meta对象,写法非常直观易懂。
内容的提问来源于stack exchange,提问作者user3552178
相关产品推荐
相关产品推荐

