Like Object.assign()
but deep 😱
Ever needed to do Object.assign()
but couldn't because you had nested objects that got overwritten instead of merged ?
object-deep-assign
merges objects recursively and can work with any depth. It has an API similar to Object.assign()
.
object-deep-assign
comes handy when you need to deal with e.g. configuration objects when you have a layered config system (e.g. a default, global and local config).
let objectDeepAssign = require('@alexbinary/object-deep-assign')
let defaultConf = {
build: true,
notify: {
on_success: false,
on_failure: true,
options: {
admin_only: true
retry: 1
}
}
}
let globalConf = {
notify: {
on_success: true
options: {
retry: 2
}
}
}
let userConf = {
notify: {
options:
admin_only: false
retry: 3
},
deploy: true
}
let finalConf = objectDeepAssign({}, defaultConf, globalConf, userConf)
// finalConf = {
// build: true,
// deploy: true,
// notify: {
// on_success: true,
// on_failure: true,
// options: {
// admin_only: false,
// retry: 3
// }
// }
// }
I wanted to try and write this thing myself, with the simplest code possible.
The code is written in plain ES2015, so it does not run on node before version 6.
$ npm install @alexbinary/object-deep-assign
# or
$ yarn add @alexbinary/object-deep-assign
let objectDeepAssign = require('@alexbinary/object-deep-assign')
Copies properties of sources
onto target
.
Scalar properties with same name are replaced. Object properties are merged recursively. Sources are merged sequentially into target from left to right.
Returns target
.
Tests are written with mocha and chai. To run the tests first do :
$ npm install # or `yarn`
to install the dev dependencies, and then do :
$ npm test # or `yarn test`
To run the test in watch mode do :
$ npm testw # or `yarn testw`
Contributions are welcome, feel free to open issues and submit pull requests on GitHub !
- object-assign-deep by saikojosh
- object-extender by saikojosh
- deep-assign by sindresorhus
- assign-deep by jonschlinkert
- merge-deep by jonschlinkert
- mixin-deep by jonschlinkert
- mini-deep-assign by alykoshin
- object-merge by kastor
MIT