• lodash的merge()方法



    概述

    在JavaScript开发中,对象合并是一个常见的操作。Lodash是一个流行的实用工具库,其中的merge()方法能够方便地将多个对象进行合并。本文将深入介绍lodash的merge()方法,包括它的使用方法、深浅拷贝的原理,以及与JavaScript内置的Object.assign()方法的区别和联系。

    merge()方法简介

    merge()方法是Lodash库中的一个函数,它允许我们将多个对象合并为一个新对象,而不改变原始对象。这个方法可以处理对象的深度合并,包括嵌套对象和数组的合并。merge()方法提供了许多可选参数,以便于控制合并的方式和行为。

    下面是merge()方法的基本语法:

    const { merge } = require('lodash');
    
    const mergedObject = merge({}, obj1, obj2, ...);
    
    • 1
    • 2
    • 3

    其中:

    • {} 表示合并后的新对象,可以传入一个空对象作为初始值。
    • obj1, obj2, ... 是要合并的多个对象,可以传入任意数量的对象。

    merge()方法会按照传入的对象顺序进行合并,并返回一个新的合并后的对象。

    merge()方法的深拷贝特性

    merge()方法在执行对象合并时采用了深拷贝的方式,这意味着它会递归地合并对象的属性,并创建一个全新的对象,而不会改变原始对象。

    让我们通过一个例子来说明:

    const lodashMerge = require('lodash').merge;
    
    const obj1 = {
      name: 'John',
      age: 25,
      address: {
        city: 'New York',
        country: 'USA'
      }
    };
    
    const obj2 = {
      age: 30,
      address: {
        city: 'San Francisco'
      }
    };
    
    const mergedObj = lodashMerge({}, obj1, obj2);
    
    console.log(mergedObj);
    // 输出:
    // {
    //   name: 'John',
    //   age: 30,
    //   address: {
    //     city: 'San Francisco',
    //     country: 'USA'
    //   }
    // }
    
    console.log(obj1);
    // 输出:
    // {
    //   name: 'John',
    //   age: 25,
    //   address: {
    //     city: 'New York',
    //     country: 'USA'
    //   }
    // }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    可以看到在上述示例中,merge()方法将obj2的属性合并到了obj1上,并返回一个新的合并后的对象mergedObj。可以看到,原始对象obj1并没有被修改,而且合并操作是深拷贝的,嵌套对象的属性也被正确地合并了。

    merge()方法与Object.assign()的区别

    虽然lodash的merge()方法和JavaScript内置的Object.assign()方法都用于对象合并,但它们之间有一些重要的区别。

    • 对象合并方式:merge()方法会递归地合并对象的属性,包括嵌套对象和数组。而Object.assign()只进行浅拷贝,仅复制对象的基本类型属性,对于对象嵌套对象没办法合并。

    • 返回值:merge()方法返回一个新的合并后的对象,而Object.assign()则修改第一个对象并返回该对象本身。

    让我们通过下面的示例来对比两者的差异:

    const obj1 = {
      name: 'John',
      age: 25,
      address: {
        city: 'New York',
        country: 'USA'
      }
    };
    
    const obj2 = {
      age: 30,
      address: {
        city: 'San Francisco'
      }
    };
    
    // 使用merge()函数进行深拷贝合并
    const lodashMerge = require('lodash').merge;
    const mergedObj = lodashMerge({}, obj1, obj2);
    
    console.log(mergedObj);
    // 输出:
    // {
    //   name: 'John',
    //   age: 30,
    //   address: {
    //     city: 'San Francisco',
    //     country: 'USA'
    //   }
    // }
    
    console.log(obj1);
    // 输出:
    // {
    //   name: 'John',
    //   age: 25,
    //   address: {
    //     city: 'New York',
    //     country: 'USA'
    //   }
    // }
    
    // 使用Object.assign()进行浅拷贝合并
    const mergedObjAssign = Object.assign({}, obj1, obj2);
    
    console.log(mergedObjAssign);
    // 输出:
    // {
    //   name: 'John',
    //   age: 30,
    //   address: {
    //     city: 'San Francisco'
    //   }
    // }
    
    console.log(obj1);
    // 输出:
    // {
    //   name: 'John',
    //   age: 30,
    //   address: {
    //     city: 'San Francisco'
    //   }
    // }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    通过上述示例,我们可以清楚地看到两者的区别。使用merge()函数后,原始对象obj1并没有被修改,而是创建了一个新的合并后的对象mergedObj。而且合并操作是深拷贝的,嵌套对象的属性也被正确地合并了。

    相比之下,使用Object.assign()后,原始对象obj1被修改了,并且嵌套对象的引用也被复制了,导致两个对象的address属性指向同一个内存地址。

    总结

    在本文中,我们深入介绍了lodash库中的merge()方法。它提供了一种方便的方式来合并多个对象,且执行深拷贝操作,不改变原始对象。与JavaScript内置的Object.assign()方法相比,merge()方法能够处理嵌套对象和数组的合并,并返回一个新的合并后的对象。通过清晰的示例代码,我们解释了merge()方法的使用方法、深浅拷贝的原理,以及与Object.assign()方法的区别和联系。这些知识将有助于你在日常开发中更好地使用和理解lodash的merge()方法。

  • 相关阅读:
    【数仓】数据仓库高频面试题题英文版(1)
    生产型外协管理系统:功能解析篇
    图解Vit 2:Vision Transformer——视觉问题中的注意力机制
    AOP的简介和专业的一些术语
    【Word自定义配置,超简单,图文并茂】自定义Word中的默认配置,比如标题大小与颜色(参考科研作图配色),正文字体等
    Java开发学习(一)----初识Spring及其核心概念
    【软件设计师-从小白到大牛】上午题基础篇:第二章 操作系统
    【学习记录】Dynaslam源代码魔改-替换MaskRCNN为YoloV5
    spring-boot-devtools热部署功能集成使用
    Java 数组
  • 原文地址:https://blog.csdn.net/Wustfish/article/details/132665708