lodash.merge
close equivalent - if this is not enough for you, use lodash.merge
- Straightforward, solves most of the use cases in FE
- w/o mutation
- w/o perf improvements
- w/o infinite recursion protection
lodash.merge
close equivalent - if this is not enough for you, use lodash.merge
This is free and unencumbered software released into the public domain. | |
Anyone is free to copy, modify, publish, use, compile, sell, or | |
distribute this software, either in source code form or as a compiled | |
binary, for any purpose, commercial or non-commercial, and by any | |
means. | |
In jurisdictions that recognize copyright laws, the author or authors | |
of this software dedicate any and all copyright interest in the | |
software to the public domain. We make this dedication for the benefit | |
of the public at large and to the detriment of our heirs and | |
successors. We intend this dedication to be an overt act of | |
relinquishment in perpetuity of all present and future rights to this | |
software under copyright law. | |
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR | |
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | |
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | |
OTHER DEALINGS IN THE SOFTWARE. | |
For more information, please refer to <http://unlicense.org> |
export default function merge(...objs) { | |
return objs.reduceRight(function mergeObj(targetObj, sourceObj) { | |
return Object.entries(sourceObj).reduce((target, [ key, value ]) => { | |
if (value && typeof value === 'object' && typeof target[key] === 'object') { | |
mergeObj(target[key], value) | |
} else { | |
target[key] = value | |
} | |
return target | |
}, targetObj) | |
}, {}) | |
} |