{"ScriptPreparationCode":"function isObject(item) {\r\n return item \u0026\u0026 typeof item === \u0027object\u0027 \u0026\u0026 !Array.isArray(item)\r\n }\r\n\r\n\r\nfunction themeMerge(target, source) {\r\n \r\n\r\n let output = Object.assign({}, target)\r\n if (isObject(target) \u0026\u0026 isObject(source)) {\r\n Object.keys(source).forEach(key =\u003E {\r\n if (isObject(source[key])) {\r\n if (!(key in target)) Object.assign(output, { [key]: source[key] })\r\n else output[key] = themeMerge(target[key], source[key])\r\n } else {\r\n Object.assign(output, { [key]: source[key] })\r\n }\r\n })\r\n }\r\n return output\r\n}\r\n\r\nfunction emptyTarget(val) {\r\n\treturn Array.isArray(val) ? [] : {}\r\n}\r\n\r\nfunction cloneUnlessOtherwiseSpecified(value, options) {\r\n\treturn (options.clone !== false \u0026\u0026 options.isObject(value))\r\n\t\t? deepmerge(emptyTarget(value), value, options)\r\n\t\t: value\r\n}\r\n\r\nfunction defaultArrayMerge(target, source, options) {\r\n\treturn target.concat(source).map(function(element) {\r\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\r\n\t})\r\n}\r\n\r\nfunction getMergeFunction(key, options) {\r\n\tif (!options.customMerge) {\r\n\t\treturn deepmerge\r\n\t}\r\n\tvar customMerge = options.customMerge(key)\r\n\treturn typeof customMerge === \u0027function\u0027 ? customMerge : deepmerge\r\n}\r\n\r\nfunction mergeObject(target, source, options) {\r\n\tvar destination = {}\r\n\tif (options.isObject(target)) {\r\n\t\tObject.keys(target).forEach(function(key) {\r\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options)\r\n\t\t})\r\n\t}\r\n\tObject.keys(source).forEach(function(key) {\r\n\t\tif (!options.isObject(source[key]) || !target[key]) {\r\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options)\r\n\t\t} else {\r\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options)\r\n\t\t}\r\n\t})\r\n\treturn destination\r\n}\r\n\r\nfunction deepmerge(target, source, options) {\r\n\toptions = options || {}\r\n\toptions.arrayMerge = options.arrayMerge\r\n\toptions.isObject = options.isObject\r\n\r\n\tvar sourceIsArray = Array.isArray(source)\r\n\tvar targetIsArray = Array.isArray(target)\r\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray\r\n\r\n\tif (!sourceAndTargetTypesMatch) {\r\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\r\n\t} else if (sourceIsArray) {\r\n\t\treturn options.arrayMerge(target, source, options)\r\n\t} else {\r\n\t\treturn mergeObject(target, source, options)\r\n\t}\r\n}","TestCases":[{"Name":"them","Code":"var a = { a: \u0027oh\u0027, b: \u0027my\u0027 };\r\nvar b = { c: \u0027goddess\u0027 };\r\nvar c = _.merge(a, b);","IsDeferred":false},{"Name":"raf","Code":"var a = { a: \u0027oh\u0027, b: \u0027my\u0027 };\r\nvar b = { c: \u0027goddess\u0027 };\r\nvar c = deepmerge(a, b);","IsDeferred":false},{"Name":"James Gill","Code":"var a = { a: \u0027oh\u0027, b: \u0027my\u0027 };\r\nvar b = { c: \u0027goddess\u0027 };\r\nvar c = themeMerge(a, b);","IsDeferred":false}]}