JS的对象合并

JS的对象合并

Object.assign()

· 同名属性会被覆盖
· 第一个参数如果不是对象的话,会转换为对象,然后进行属性合并,如果转换失败则会报错
· 其他参数如果不是对象的话,会转换为对象,如果转换失败,会被忽略。

        const o1 = {a: 1, b: 2}
        const o2 = {b: 3, c: 4}

        const res1 = Object.assign(o1, o2)
        console.log(res1); 

在这里插入图片描述

扩展运算符

· 同名属性会被覆盖
· 对于第一个参数没有限制,如果不能转换为对象,会直接忽略。

        const res2 = {...o1, ...o2}
        console.log(res2);

在这里插入图片描述

以上两种是使用原生JS可以实现的,下面几种是使用各种JS实用库提供的方法使用方法和Object.assign() 类似。
JQuery.extend()
lodash.assign()
lodash.merge()

        // 方法三 JQuery.extend()
        const res3 = jQuery.extend(o1, o2)
        console.log(res3);


        // 方法四: lodash.assign()

        const res4 = _.assign(o1, o2);
        console.log(res4);

        // 方法五: lodash.merge()
        const res5 = _.merge(o1, o2);
        console.log(res5);
        
        // 方法六:Immutable.merge()
        const res6 = Immutable.merge(o1, o2)
        console.log(res6);

lodash.assign() 和 lodash.merge()的区别

· lodash.assign() 是基于 Object.assign() 实现的, 遇到同名属性会覆盖。
· lodash.merge() 遇到同名属性值是对象字面量形式或者集合形式,按照对象属性进行合并或者数组索引进行 值合并

        const o3 = {
            c: 1,
            d: {
                e: 1,
                f: 2
            },
            h: [
                { i: 1 },
                { i: 1 }
            ]
        }

        const o4 = {
            c: 2,
            d: {
                e: 3,
                g: 4
            },
            h: [
                { j: 2 },
                { j: 2 }
            ]
        }

        const res7 = _.assign(o3, o4);
        console.log('res7',res7);

        const res8 = _.merge(o3, o4);
        console.log('res8',res8);

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值