JavaScript中的深度合并和浅合并

33

深度合并和浅合并在JavaScript对象中有什么区别? 据我所知,深度合并会递归地将所有源对象可枚举属性复制到目标对象中。但是浅合并会做什么呢?


3
可能是深拷贝和浅拷贝有什么区别?的重复问题。 - Melissa
5
复制和合并是两件不同的事情。 - Felix Kling
1个回答

63
在浅合并中,第一个对象的属性将被第二个对象相同属性值所覆盖。
让我们来看一个例子。设置:
var obj1 = {
  foo: {
    prop1: 42,
  },
};

var obj2 = {
  foo: {
    prop2: 21,
  },
  bar: {
    prop3: 10,
  },
};

肤浅:

var result = {
  foo: {          // `foo` got overwritten with the value of `obj2`
    prop2: 21,
  },
  bar: {
    prop3: 10,
  },
};

深度:

var result = {
  foo: {
    prop1: 42,
    prop2: 21,    // `obj2.foo` got merged into `obj1.foo`.
  },
  bar: {
    prop3: 10,
  },
};

4
浅合并是否只检查要合并的对象的一级属性?例如,我们有var obj1 = {foo: {prop1: 42,foosInnerObj: {someProp: someVal}}}; 浅合并是否完全忽略 'foosInnerObj' ,然后只保留 obj2 中 foo 中的 prop2? - anand
1
是的。基本上只是 obj1.foo = obj2.foo;(假设您合并到 obj1 中)。因此称为“浅层”。 - Felix Kling
谢谢Felix,它帮了我 :) - anand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接