将两对象(重复属性不替换)合并成一个对象

将这两个对象合并成一个对象

const obj1 = {
    "configType": "all",
    "config": {"a":'1'}
};

const obj2 = {
    "target_cluster": "dev-0821",
    "type": "import",
    "config": {
        "connector.class": "MirrorSourceConnector",
        "tasks.max": 2
    },
    "name": "22"
};

方法1: Object.assign
在这里插入图片描述

有一个坑就是let objnew= object.assign({},obj1,obj2)
这个样子就不改变obj1的值了;他会修改assigin()里面第一项的值,并返回

const obj2.config=(Object.assign(obj1.config, obj2.config)) 
const newObj=(Object.assign({},obj1, obj2)) 

Object.assign直接使用不符合预期,会将相同属性合并替换;
obj2会将obj1的相同属性config的内容替换

在这里插入图片描述
so,若非先非要使用那就是先把config合并一下,然后再把obj1,2合并一下

前提是你要知道要合并的是config, 假如你不知道里面是config,还是config1,
那这样写不太行;如果你不知道的话那就只能循环取值比较,然后合并

在这里插入图片描述

方法2:lodash的mergeWith(🌟推荐使用
在这里插入图片描述

_.mergeWith(obj1, obj2);

在这里插入图片描述

你可以使用`_.mergeWith()`方法来合并JSON对象,并且保留已有属性不被覆盖。具体步骤如下: 1. 使用`_.mergeWith()`方法将JSON对象合并,同时自定义一个合并策略函数; 2. 在合并策略函数中判断,如果目标对象中已有该属性,则不进行覆盖,否则进行属性替换。 示例如下: ```javascript const _ = require('lodash'); // 定义源对象和目标对象 const sourceObj = { name: 'Alice', age: 20, address: { city: 'Shanghai', street: '123 Main St.', postalCode: '200000' } }; const targetObj = { name: 'Bob', gender: 'male', address: { city: 'Beijing', postalCode: '100000' } }; // 合并对象,保留已有属性 const mergeStrategy = (objValue, srcValue, key, target, source) => { if (_.has(target, key)) { // 如果目标对象中已有该属性,则不进行覆盖 return objValue; } else { // 否则进行属性替换 return srcValue; } }; const resultObj = _.mergeWith(targetObj, sourceObj, mergeStrategy); console.log(resultObj); // 输出: // { // name: 'Bob', // gender: 'male', // address: { // city: 'Beijing', // street: '123 Main St.', // postalCode: '100000' // }, // age: 20 // } ``` 在上面的例子中,我们定义了一个对象`sourceObj`和一个目标对象`targetObj`,然后使用`_.mergeWith()`方法将对象合并,同时自定义了一个合并策略函数`mergeStrategy`。在合并策略函数中,我们判断了如果目标对象中已有该属性,则不进行覆盖,否则进行属性替换。最后,我们输出合并后的结果对象`resultObj`,可以看到已有属性被保留,重复属性替换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值