{"ScriptPreparationCode":"var obj1 = [\r\n\t{\r\n\t\t\u0022id\u0022: \u00220001\u0022,\r\n\t\t\u0022type\u0022: \u0022donut\u0022,\r\n\t\t\u0022name\u0022: \u0022Cake\u0022,\r\n\t\t\u0022ppu\u0022: 0.55,\r\n\t\t\u0022batters\u0022:\r\n\t\t\t{\r\n\t\t\t\t\u0022batter\u0022:\r\n\t\t\t\t\t[\r\n\t\t\t\t\t\t{ \u0022id\u0022: \u00221001\u0022, \u0022type\u0022: \u0022Regular\u0022 },\r\n\t\t\t\t\t\t{ \u0022id\u0022: \u00221002\u0022, \u0022type\u0022: \u0022Chocolate\u0022 },\r\n\t\t\t\t\t\t{ \u0022id\u0022: \u00221003\u0022, \u0022type\u0022: \u0022Blueberry\u0022 },\r\n\t\t\t\t\t\t{ \u0022id\u0022: \u00221004\u0022, \u0022type\u0022: \u0022Devil\u0027s Food\u0022 }\r\n\t\t\t\t\t]\r\n\t\t\t},\r\n\t\t\u0022topping\u0022:\r\n\t\t\t[\r\n\t\t\t\t{ \u0022id\u0022: \u00225001\u0022, \u0022type\u0022: \u0022None\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225002\u0022, \u0022type\u0022: \u0022Glazed\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225005\u0022, \u0022type\u0022: \u0022Sugar\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225007\u0022, \u0022type\u0022: \u0022Powdered Sugar\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225006\u0022, \u0022type\u0022: \u0022Chocolate with Sprinkles\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225003\u0022, \u0022type\u0022: \u0022Chocolate\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225004\u0022, \u0022type\u0022: \u0022Maple\u0022 }\r\n\t\t\t]\r\n\t},\r\n\t{\r\n\t\t\u0022id\u0022: \u00220002\u0022,\r\n\t\t\u0022type\u0022: \u0022donut\u0022,\r\n\t\t\u0022name\u0022: \u0022Raised\u0022,\r\n\t\t\u0022ppu\u0022: 0.55,\r\n\t\t\u0022batters\u0022:\r\n\t\t\t{\r\n\t\t\t\t\u0022batter\u0022:\r\n\t\t\t\t\t[\r\n\t\t\t\t\t\t{ \u0022id\u0022: \u00221001\u0022, \u0022type\u0022: \u0022Regular\u0022 }\r\n\t\t\t\t\t]\r\n\t\t\t},\r\n\t\t\u0022topping\u0022:\r\n\t\t\t[\r\n\t\t\t\t{ \u0022id\u0022: \u00225001\u0022, \u0022type\u0022: \u0022None\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225002\u0022, \u0022type\u0022: \u0022Glazed\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225005\u0022, \u0022type\u0022: \u0022Sugar\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225003\u0022, \u0022type\u0022: \u0022Chocolate\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225004\u0022, \u0022type\u0022: \u0022Maple\u0022 }\r\n\t\t\t]\r\n\t},\r\n\t{\r\n\t\t\u0022id\u0022: \u00220003\u0022,\r\n\t\t\u0022type\u0022: \u0022donut\u0022,\r\n\t\t\u0022name\u0022: \u0022Old Fashioned\u0022,\r\n\t\t\u0022ppu\u0022: 0.55,\r\n\t\t\u0022batters\u0022:\r\n\t\t\t{\r\n\t\t\t\t\u0022batter\u0022:\r\n\t\t\t\t\t[\r\n\t\t\t\t\t\t{ \u0022id\u0022: \u00221001\u0022, \u0022type\u0022: \u0022Regular\u0022 },\r\n\t\t\t\t\t\t{ \u0022id\u0022: \u00221002\u0022, \u0022type\u0022: \u0022Chocolate\u0022 }\r\n\t\t\t\t\t]\r\n\t\t\t},\r\n\t\t\u0022topping\u0022:\r\n\t\t\t[\r\n\t\t\t\t{ \u0022id\u0022: \u00225001\u0022, \u0022type\u0022: \u0022None\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225002\u0022, \u0022type\u0022: \u0022Glazed\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225003\u0022, \u0022type\u0022: \u0022Chocolate\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225004\u0022, \u0022type\u0022: \u0022Maple\u0022 }\r\n\t\t\t]\r\n\t}\r\n]\r\n\r\nvar obj2 = [\r\n\t{\r\n\t\t\u0022id\u0022: \u00220001\u0022,\r\n\t\t\u0022type\u0022: \u0022donut\u0022,\r\n\t\t\u0022name\u0022: \u0022Cake\u0022,\r\n\t\t\u0022ppu\u0022: 0.55,\r\n\t\t\u0022batters\u0022:\r\n\t\t\t{\r\n\t\t\t\t\u0022batter\u0022:\r\n\t\t\t\t\t[\r\n\t\t\t\t\t\t{ \u0022id\u0022: \u00221001\u0022, \u0022type\u0022: \u0022Overwritten\u0022 },\r\n\t\t\t\t\t\t{ \u0022id\u0022: \u00221002\u0022, \u0022type\u0022: \u0022Chocolate\u0022 },\r\n\t\t\t\t\t\t{ \u0022id\u0022: \u00221003\u0022, \u0022type\u0022: \u0022Overwritten\u0022 },\r\n\t\t\t\t\t\t{ \u0022id\u0022: \u00221004\u0022, \u0022type\u0022: \u0022Devil\u0027s Food\u0022 }\r\n\t\t\t\t\t]\r\n\t\t\t},\r\n\t\t\u0022topping\u0022:\r\n\t\t\t[\r\n\t\t\t\t{ \u0022id\u0022: \u00225001\u0022, \u0022type\u0022: \u0022Overwritten\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225002\u0022, \u0022type\u0022: \u0022Overwritten\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225005\u0022, \u0022type\u0022: \u0022Sugar\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225007\u0022, \u0022type\u0022: \u0022Powdered Sugar\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225006\u0022, \u0022type\u0022: \u0022Chocolate with Sprinkles\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225003\u0022, \u0022type\u0022: \u0022Chocolate\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225004\u0022, \u0022type\u0022: \u0022Overwritten\u0022 }\r\n\t\t\t]\r\n\t},\r\n\t{\r\n\t\t\u0022id\u0022: \u00220002\u0022,\r\n\t\t\u0022type\u0022: \u0022Overwritten\u0022,\r\n\t\t\u0022name\u0022: \u0022Raised\u0022,\r\n\t\t\u0022ppu\u0022: 0.55,\r\n\t\t\u0022batters\u0022:\r\n\t\t\t{\r\n\t\t\t\t\u0022batter\u0022:\r\n\t\t\t\t\t[\r\n\t\t\t\t\t\t{ \u0022id\u0022: \u00221001\u0022, \u0022type\u0022: \u0022Overwritten\u0022 }\r\n\t\t\t\t\t]\r\n\t\t\t},\r\n\t\t\u0022topping\u0022:\r\n\t\t\t[\r\n\t\t\t\t{ \u0022id\u0022: \u00225001\u0022, \u0022type\u0022: \u0022None\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225002\u0022, \u0022type\u0022: \u0022Overwritten\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225005\u0022, \u0022type\u0022: \u0022Sugar\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225003\u0022, \u0022type\u0022: \u0022Chocolate\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225004\u0022, \u0022type\u0022: \u0022Maple\u0022 }\r\n\t\t\t]\r\n\t},\r\n\t{\r\n\t\t\u0022id\u0022: \u00220003\u0022,\r\n\t\t\u0022type\u0022: \u0022Overwritten\u0022,\r\n\t\t\u0022name\u0022: \u0022Old Fashioned\u0022,\r\n\t\t\u0022ppu\u0022: 0.55,\r\n\t\t\u0022batters\u0022:\r\n\t\t\t{\r\n\t\t\t\t\u0022batter\u0022:\r\n\t\t\t\t\t[\r\n\t\t\t\t\t\t{ \u0022id\u0022: \u00221001\u0022, \u0022type\u0022: \u0022Overwritten\u0022 },\r\n\t\t\t\t\t\t{ \u0022id\u0022: \u00221002\u0022, \u0022type\u0022: \u0022Chocolate\u0022 }\r\n\t\t\t\t\t]\r\n\t\t\t},\r\n\t\t\u0022topping\u0022:\r\n\t\t\t[\r\n\t\t\t\t{ \u0022id\u0022: \u00225001\u0022, \u0022type\u0022: \u0022None\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225002\u0022, \u0022type\u0022: \u0022Glazed\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225003\u0022, \u0022type\u0022: \u0022Chocolate\u0022 },\r\n\t\t\t\t{ \u0022id\u0022: \u00225004\u0022, \u0022type\u0022: \u0022Maple\u0022 }\r\n\t\t\t]\r\n\t}\r\n]\r\n\r\n\r\n// ------------------------------------------------------------------------\r\n// ------------------------------------------------------------------------\r\n// ------------------------------------------------------------------------\r\n\r\nfunction isObject(item) {\r\n return item \u0026\u0026 typeof item === \u0027object\u0027 \u0026\u0026 !Array.isArray(item);\r\n}\r\n\r\nfunction merge(\r\n target,\r\n ...sources\r\n) {\r\n if (!sources.length) return target;\r\n const source = sources.shift();\r\n\r\n if (isObject(target) \u0026\u0026 isObject(source)) {\r\n for (const key in source) {\r\n if (isObject(source[key])) {\r\n if (!target[key])\r\n Object.assign(target, {\r\n [key]: {},\r\n });\r\n merge(target[key], source[key]);\r\n } else {\r\n Object.assign(target, {\r\n [key]: source[key],\r\n });\r\n }\r\n }\r\n }\r\n\r\n return merge(target, ...sources);\r\n}","TestCases":[{"Name":"custom deep merge","Code":"merge(obj1, obj2)","IsDeferred":false},{"Name":"lodash","Code":"_.merge(obj1, obj2)","IsDeferred":false}]}