如何在JavaScript(NodeJS)中合并多个嵌套对象?
嵌套对象合并解决方案
你用Object.assign(obj1, obj2)得不到预期结果,是因为它属于浅合并——当遇到嵌套对象时,会直接用后面对象的属性覆盖前面的,而不会递归合并内部属性。比如这里obj2.db会直接替换obj1.db,而不是把两个db里的属性合并到一起。
下面给你几种可行的实现方式:
1. 手动嵌套合并(适合结构简单的场景)
如果你的对象结构固定且不复杂,可以直接用扩展运算符(...)逐个合并嵌套层级:
const mergedObj = { db: { ...obj1.db, ...obj2.db }, token: obj3.token };
这种方式直观,不需要额外函数,适合明确知道对象结构的情况。
2. 通用深合并函数(适合复杂/动态结构)
如果需要处理任意层级的嵌套对象,写一个递归的深合并函数更通用:
function deepMerge(...objects) { return objects.reduce((result, current) => { // 遍历当前对象的所有属性 for (const key in current) { if (current.hasOwnProperty(key)) { const currentVal = current[key]; const resultVal = result[key]; // 如果当前属性是对象(且不是数组、null),递归合并 if (typeof currentVal === 'object' && currentVal !== null && !Array.isArray(currentVal)) { result[key] = deepMerge(resultVal || {}, currentVal); } else { // 非对象属性直接赋值 result[key] = currentVal; } } } return result; }, {}); } // 使用方式:传入所有要合并的对象 const mergedObj = deepMerge(obj1, obj2, obj3);
这个函数会递归遍历每个对象的属性,遇到嵌套对象就继续合并,最终得到完全合并后的结果。
3. 第三方工具库(可选)
如果你的项目已经引入了工具库(比如Lodash),可以直接用现成的深合并方法,比如Lodash的_.merge:
const mergedObj = _.merge(obj1, obj2, obj3);
这种方式不需要自己写函数,适合已经用了工具库的项目。
内容的提问来源于stack exchange,提问作者Mumbarun
相关产品推荐
相关产品推荐

