What is the difference between deep and shallow merge of objects in javascript? As far as I understand, deep merge recursively copies all the source object enumerable properties into target object. But what does shallow merge do?
            Asked
            
        
        
            Active
            
        
            Viewed 1.4k times
        
    33
            
            
        - 
                    3Possible duplicate of [What is the difference between a deep copy and a shallow copy?](http://stackoverflow.com/questions/184710/what-is-the-difference-between-a-deep-copy-and-a-shallow-copy) – Melissa Mar 11 '17 at 04:50
- 
                    5@FirstOrGoat: Copying and merging are two different things. – Felix Kling Mar 11 '17 at 04:53
1 Answers
62
            In a shallow merge, the properties of the first object are overwritten with the same property values of the second object.
Lets look at an example. Setup:
var obj1 = {
  foo: {
    prop1: 42,
  },
};
var obj2 = {
  foo: {
    prop2: 21,
  },
  bar: {
    prop3: 10,
  },
};
Shallow:
var result = {
  foo: {          // `foo` got overwritten with the value of `obj2`
    prop2: 21,
  },
  bar: {
    prop3: 10,
  },
};
Deep:
var result = {
  foo: {
    prop1: 42,
    prop2: 21,    // `obj2.foo` got merged into `obj1.foo`.
  },
  bar: {
    prop3: 10,
  },
};
 
    
    
        Felix Kling
        
- 795,719
- 175
- 1,089
- 1,143
- 
                    4Is it that shallow merge just checks the first level properties in the object to merge? say for example , we have var obj1 = { foo: { prop1: 42, foosInnerObj: { someProp: someVal } }, }; Does shallow merge ignore 'foosInnerObj' completely? and keeps only prop2 from obj2 in foo? – anand Mar 11 '17 at 05:08
- 
                    1Yep. It's basically just `obj1.foo = obj2.foo;` (assuming you merge into `obj1`). Hence the term "shallow". – Felix Kling Mar 11 '17 at 05:12
- 
                    
