记录一次 lodash.merge 和 Object.assign 合并对象的区别

lodash.mergeObject.assign` 都可以用于合并多个对象,但它们在处理深层嵌套对象时有显著的区别。以下是它们的主要区别:

1. 深度合并 vs. 浅合并

  • lodash.merge
    • 进行深度合并(deep merge),即递归地合并对象的所有嵌套属性。
    • 如果源对象和目标对象中有相同的嵌套属性,lodash.merge 会递归地合并这些属性,而不是直接覆盖。
  • Object.assign
    • 进行浅合并(shallow merge),即只合并对象的第一层属性。
    • 如果源对象和目标对象中有相同的属性,Object.assign 会直接覆盖目标对象中的属性,而不会递归地合并嵌套属性。
import { merge } from 'lodash'

const object1 = { a: 1, b: { c: 2 } };
const object2 = { b: { d: 4 } };

// 使用 lodash.merge
const mergedWithLodash = merge({}, object1, object2);
console.log(mergedWithLodash); 
// 输出: { a: 1, b: { c: 2, d: 4 } }

// 使用 Object.assign
const mergedWithAssign = Object.assign({}, object1, object2);
console.log(mergedWithAssign); 
// 输出: { a: 1, b: { d: 4 } }

在上述示例中,lodash.merge 会递归地合并 object1object2 中的 b 属性,而 Object.assign 则会直接覆盖 b 属性。

  • 使用 lodash.merge 时,如果需要深度合并对象,特别是嵌套对象,可以使用它。
  • 使用 Object.assign 时,如果只需要浅合并对象的第一层属性,可以使用它。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容