关于对象深层级的拷贝

今天合并个echarts属性的代码,优先使用页面级的配置。这里就涉及到了对象的合并,但是自定义配置不能层级关系肯定一致,有时仅需要配置某一个属性即可。
最开始使用了解构赋值,后来发现结构赋值和Object.assign()均无法实现需求,多层级且结构不一的情况下,后面的对象会覆盖前面的。如下例中的value2,均被覆盖。
所以使用最下方自定义的方法,依次遍历赋值最靠谱,可以直接诶复制代码在控制台操作查看结果。

es6 Object.assign()

Object.assign(
{},
{ a : { a2 : { value : 1, value2 :1 } }, b2 : '123' } ,
{ a : { a2 : { value : 2 } }, b2: '456' } 
)
// 结果
{
  "a": {
    "a2": {
      "value": 2
    }
  },
  "b2": "456"
}

在这里插入图片描述

es6 …解构赋值

{ 
...{ a : { a2 : { value : 1, value2 :1 } }, b2 : '123 '},
...{ a : { a2 : { value : 2 } }, b2: '456' } 
}
// 结果:
{
  "a": {
    "a2": {
      "value": 2
    }
  },
  "b2": "456"
}

在这里插入图片描述

深度合并结构

deepObjectMerge方法来自这里

function deepObjectMerge(firstOBJ, SecondOBJ) {
  const FirstOBJ = Object.assign({}, firstOBJ) // 防止原数据被修改
  for (var key in SecondOBJ) {
    FirstOBJ[key] = FirstOBJ[key] && FirstOBJ[key].toString() === '[object Object]'
      ? deepObjectMerge(FirstOBJ[key], SecondOBJ[key]) : FirstOBJ[key] = SecondOBJ[key]
  }
  return FirstOBJ
}
let m = { a : { a2 : { value : 1, value2 :1 } }, b2 : '123' }
let n = { a : { a2 : { value : 2 } }, b2: '456' } 
deepObjectMerge(m,n)
// 结果
{
  "a": {
    "a2": {
      "value": 2,
      "value2": 1
    }
  },
  "b2": "456"
}

在这里插入图片描述
在合并的两个对象各有差异时,完美根据key值合并并返回了。

let m = { a : { a2 : { value : 1, value2 :1 } }, b2: '456' }
let n = { a : { a2 : { value : 2 }, a3:{value3: 1} }, b2: '4567' }
deepObjectMerge(m,n)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值