{"ScriptPreparationCode":"var o = {\r\n a: {\r\n b: 1,\r\n c: 2,\r\n d: 3,\r\n j: {\r\n k: [1,2,3],\r\n l: [4,5,6]\r\n },\r\n },\r\n e: [1,2,3,4,5,6],\r\n f: 1,\r\n g: {\r\n h: 1,\r\n }\r\n}\r\n\r\nvar visited = Symbol(\u0027visited\u0027);\r\nvar stopProcessing = false;\r\n\r\nfunction copy(object) {\r\n // dates\r\n if (object instanceof Date) {\r\n return new Date(object.getTime());\r\n // arrays\r\n } else if (object instanceof Array) {\r\n const target = [];\r\n\r\n for (const obj of object) {\r\n target.push(copy(obj));\r\n }\r\n\r\n return target;\r\n // objects\r\n } else if (object instanceof Object) {\r\n if (object[visited]) {\r\n delete object[visited];\r\n return object;\r\n }\r\n\r\n if (stopProcessing) {\r\n return object;\r\n }\r\n\r\n object[visited] = true;\r\n\r\n const target = {};\r\n\r\n for (const prop in object) {\r\n if (object.hasOwnProperty(prop)) {\r\n if (object[visited]) {\r\n delete object[visited];\r\n stopProcessing = true;\r\n }\r\n\r\n target[prop] = copy(object[prop]);\r\n }\r\n }\r\n\r\n stopProcessing = false;\r\n return target;\r\n } else {\r\n // it\u0027s a primitive\r\n return object;\r\n }\r\n}","TestCases":[{"Name":"Lodash clone","Code":"const a = _.clone(o)","IsDeferred":false},{"Name":"ES6 spread","Code":"const a = { ...o }","IsDeferred":false},{"Name":"ES6 Object.assign","Code":"const a = Object.assign({}, o)","IsDeferred":false},{"Name":"Json","Code":"const a = JSON.parse(JSON.stringify(o))","IsDeferred":false},{"Name":"copy","Code":"const a = copy(o);","IsDeferred":false}]}