{"ScriptPreparationCode":"var MyObject = {\r\n description: \u0027Creates a deep copy of source, which should be an object or an array.\u0027,\r\n myNumber: 123456789,\r\n myBoolean: true,\r\n jayson: {\r\n stringify: \u0027JSON.stringify() method converts a JavaScript value to a JSON string....\u0027,\r\n parse: \u0027JSON.parse() method parses a JSON string...\u0027\r\n }\r\n};\r\n\r\nvar myCopy = null;\r\n\r\nvar rfdcClone = rfdc();\r\n\r\n///////////////////////////////////////////////////////////////////\r\nfunction recursiveDeepCopy(value) {\r\n if (value instanceof Date) {\r\n return new Date(value);\r\n }\r\n if (value instanceof RegExp) {\r\n return new RegExp(value);\r\n }\r\n if (value instanceof Map) {\r\n return new Map(value);\r\n }\r\n if (value instanceof Set) {\r\n return new Set(value);\r\n }\r\n if (typeof value !== \u0027object\u0027) {\r\n return value;\r\n }\r\n if (!value) {\r\n return value;\r\n }\r\n let newObject;\r\n if (\u0027[object Array]\u0027 === Object.prototype.toString.apply(value)) {\r\n newObject = [];\r\n for (let i = 0; i \u003C value.length; i \u002B= 1) {\r\n newObject[i] = recursiveDeepCopy(value[i]);\r\n }\r\n return newObject;\r\n }\r\n\r\n newObject = {};\r\n for (let i in value) {\r\n if (value.hasOwnProperty(i)) {\r\n newObject[i] = recursiveDeepCopy(value[i]);\r\n }\r\n }\r\n return newObject;\r\n}\r\n","TestCases":[{"Name":"lodash cloneDeep","Code":"myCopy = _.cloneDeep(MyObject);","IsDeferred":false},{"Name":"JSON.parse(JSON.stringify())","Code":"myCopy = JSON.parse(JSON.stringify(MyObject));","IsDeferred":false},{"Name":"recursiveDeepCopy","Code":"myCopy = recursiveDeepCopy(MyObject);","IsDeferred":false},{"Name":"structuredClone","Code":"myCopy = structuredClone(MyObject);","IsDeferred":false},{"Name":"rfdc","Code":"myCopy = rfdcClone(MyObject);","IsDeferred":false}]}