Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@stefanmaric
Created July 2, 2019 16:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stefanmaric/86b7bcb7398ba018109a9a8497e3443f to your computer and use it in GitHub Desktop.
Save stefanmaric/86b7bcb7398ba018109a9a8497e3443f to your computer and use it in GitHub Desktop.
Deep Defaults function in JavaScript
const defaultPredicate = (x) => x === null || x === undefined
const deepDefaults = (target, defaults, predicate = defaultPredicate) => {
if (Object(target) !== target) return Object.assign({}, defaults)
return Object.keys(defaults).reduce((acc, key) => {
if (Object(defaults[key]) === defaults[key]) {
acc[key] = deepDefaults(target[key] || {}, defaults[key], predicate)
} else {
acc[key] = predicate(target[key], key) ? defaults[key] : target[key]
}
return acc
}, {
...target,
})
}
export default deepDefaults
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment