Object.assign()方法不能合并深层次对象

我们只知道Object.assign()方法能合并对象,已存在键的会对其进行更新,不存在的会新增并合并生成一个新对象
但是 Object.assign()方法合并只适用于单层对象
多层对象并不适用
比如:单层对象

const _form = {
  site: "",
  type: "",
  author: "",
  bk: "",
  info: "",
  domain: "",
};

比如:多层对象

const _listQuery = {
  data: {
    key: "",
    qyid: "",
    type: "",
  },
  p: {
    page: 0,
    pageSize: 0,
    total: 0,
  },
};

举个例子:

var a = {a: {b: 1, c: 2}}
var b = {a: {b: 1, c:2},d:3}
var c=Object.assign(a, b)
console.log(c)

输出结果会是{ a: { b: 1, c: 2 } ,d:3}
而不是我们想要的这样的 { a: { x: 1,z:3, y: 2 },d:3 }
我们可以找个替代品来实现对象的深层合并(看别的大佬写的代码)

var _ = require("lodash");
var a = {a: {b: 1, c: 2}}
var b = {a: {b: 1, c:2},d:3}
console.log(_.merge(a, b));
console.log(a);

这样有个缺点:
就是Object.assign()方法是单层深拷贝
而这个方法是在a的值的基础上进行更改

猜你喜欢

转载自blog.csdn.net/m0_54932975/article/details/126642517