Skip to content

Instantly share code, notes, and snippets.

@goldo
Last active December 14, 2023 00:49
Show Gist options
  • Star 10 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save goldo/2b1abf3f1f657e63e9a870f4877da80d to your computer and use it in GitHub Desktop.
Save goldo/2b1abf3f1f657e63e9a870f4877da80d to your computer and use it in GitHub Desktop.
Differences between .assignIn(), .assign, .merge(), defaults() and defaultsDeep()
// Tests with Lodash 4.16.4
// Thanks to http://stackoverflow.com/questions/19965844/lodash-difference-between-extend-assign-and-merge
_.assignIn ({}, { a: 'a' }, { a: 'bb' }) // => { a: 'bb' }
_.merge ({}, { a: 'a' }, { a: 'bb' }) // => { a: 'bb' }
_.defaults ({}, { a: 'a' }, { a: 'bb' }) // => { a: 'a' }
_.defaultsDeep({}, { a: 'a' }, { a: 'bb' }) // => { a: 'a' }
---
_.assignIn ({}, { a: 'a' }, { a: undefined }) // => { a: undefined }
_.merge ({}, { a: 'a' }, { a: undefined }) // => { a: 'a' }
_.defaults ({}, { a: undefined }, { a: 'bb' }) // => { a: 'bb' }
_.defaultsDeep({}, { a: undefined }, { a: 'bb' }) // => { a: 'bb' }
---
_.assignIn ({}, {a:{a:'a'}}, {a:{b:'bb'}}) // => { a: { b: 'bb' } }
_.merge ({}, {a:{a:'a'}}, {a:{b:'bb'}}) // => { a: { a: 'a', b: 'bb' } }
_.defaults ({}, {a:{a:'a'}}, {a:{b:'bb'}}) // => { a: { a: 'a' } }
_.defaultsDeep({}, {a:{a:'a'}}, {a:{b:'bb'}}) // => { a: { a: 'a', b: 'bb' } }
---
_.assignIn ({}, {a:['a']}, {a:['bb']}) // => { a: [ 'bb' ] }
_.merge ({}, {a:['a']}, {a:['bb']}) // => { a: [ 'bb' ] }
_.defaults ({}, {a:['a']}, {a:['bb']}) // => { a: [ 'a' ] }
_.defaultsDeep({}, {a:['a']}, {a:['bb']}) // => { a: [ 'a' ] }
---
_.assignIn ([], ['a'], ['bb']) // => [ 'bb' ]
_.merge ([], ['a'], ['bb']) // => [ 'bb' ]
_.defaults ([], ['a'], ['bb']) // => [ 'a' ]
_.defaultsDeep([], ['a'], ['bb']) // => [ 'a' ]
_.assignIn ([], ['a','b'], ['bb']) // => [ 'bb', 'b' ]
_.merge ([], ['a','b'], ['bb']) // => [ 'bb', 'b' ]
_.defaults ([], ['a','b'], ['bb']) // => [ 'a', 'b' ]
_.defaultsDeep([], ['a','b'], ['bb']) // => [ 'a', 'b' ]
---
// _.assign vs _.assignIn
function Foo() {
this.a = 1;
}
function Bar() {
this.c = 3;
}
Foo.prototype.b = 2;
Bar.prototype.d = 4;
_.assignIn({ 'a': 0 }, new Foo, new Bar);
// => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
_.assign({ 'a': 0 }, new Foo, new Bar);
// => { 'a': 1, 'c': 3 }
@tjmgregory
Copy link

Not all heroes wear capes

@Djspaceg
Copy link

Djspaceg commented Oct 4, 2023

This is surprisingly helpful. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment