UNPKG

deepmerge2

Version:

A library for deep (recursive) merging of Javascript objects

68 lines (61 loc) 1.73 kB
(function(root, factory) { if(typeof define === 'function' && define.amd) { define(factory); } else if(typeof exports === 'object') { module.exports = factory(); } else { root.deepmerge = factory(); } }(this, function() { function deepmerge(target, src) { var array = Array.isArray(src); var dst = array && [] || {}; if(array) { target = target || []; dst = dst.concat(target); src.forEach(function(e, i) { if(typeof dst[i] === 'undefined') { dst[i] = e; } else if(typeof e === 'object' && e !== null) { dst[i] = deepmerge(target[i], e); } else { if(target.indexOf(e) === -1) { dst.push(e); } } }); } else { if(target && typeof target === 'object') { Object.keys(target).forEach(function(key) { dst[key] = target[key]; }) } Object.keys(src).forEach(function(key) { switch(true) { case typeof src[key] !== 'object': case !src[key]: case src[key] instanceof Date: case src[key] instanceof RegExp: { dst[key] = src[key]; break; } default: { if(!target[key]) { dst[key] = src[key]; } else { dst[key] = deepmerge(target[key], src[key]); } } } }); } return dst; } return function deepMergeWrapper(target) { var result = target; Array.prototype.slice.call(arguments, 1).forEach(function(elem) { result = deepmerge(result, elem); }); return result; } }));