如何将导入的对象展开合并到另一对象的子属性中且不保留外层嵌套键
JavaScript多对象平铺合并解决方案
你当前写法的问题是将导入的对象整体作为sub的子属性存放,要实现属性平铺到sub层级,可通过以下两种方案实现,均支持多个导入文件合并:
方案1:对象展开运算符(最常用,可读性高)
直接在sub对象内对导入的对象使用展开运算符...,即可将对象的所有属性平铺到当前层级,有多个合并对象时依次追加即可:
// 可导入任意数量需要合并的对象 const dott = require('./dott.js'); const otherConf = require('./otherConf.js'); const datt = { sub: { first: 'Jhon', last: 'Doe', ...dott, // 平铺dott的所有属性 ...otherConf // 平铺第二个文件的属性,更多文件依次加即可 } }
方案2:Object.assign()(适合动态批量合并)
如果需要合并的对象数量较多、或者需要动态调整合并列表,可使用Object.assign方法批量合并:
const dott = require('./dott.js'); const conf1 = require('./conf1.js'); const conf2 = require('./conf2.js'); // 合并列表可动态增删元素 const mergeObjs = [dott, conf1, conf2]; const datt = { sub: Object.assign( // 基础属性对象 { first: 'Jhon', last: 'Doe' }, // 批量展开所有待合并对象作为assign参数 ...mergeObjs ) }
注意事项
如果不同合并对象存在重名属性,顺序靠后的对象属性会覆盖靠前的属性,可根据业务需要调整展开/传入Object.assign的顺序。
内容的提问来源于stack exchange,提问作者Hakim
相关产品推荐
相关产品推荐

