{"ScriptPreparationCode":"var obj1 = {\r\n 0: {\r\n 1: {\r\n key: \u0027one\u0027\r\n \t}\r\n }\r\n};\r\n\r\nvar obj1copy = {\r\n 0: {\r\n 1: {\r\n key: \u0027one\u0027\r\n \t}\r\n }\r\n};\r\n\r\nvar obj2 = {\r\n 0: {\r\n 1: {\r\n key: \u0027two\u0027\r\n \t}\r\n }\r\n};\r\nfunction isEqual(a,b){\r\n\treturn JSON.stringify(a) === JSON.stringify(b)\r\n}\r\n\r\nfunction compareObjects(a, b) {\r\n if (a === b) return true;\r\n\r\n if (typeof a != \u0027object\u0027 || typeof b != \u0027object\u0027 || a == null || b == null) return false;\r\n\r\n let keysA = Object.keys(a), keysB = Object.keys(b);\r\n\r\n if (keysA.length != keysB.length) return false;\r\n\r\n for (let key of keysA) {\r\n if (!keysB.includes(key)) return false;\r\n\r\n if (typeof a[key] === \u0027function\u0027 || typeof b[key] === \u0027function\u0027) {\r\n if (a[key].toString() != b[key].toString()) return false;\r\n } else {\r\n if (!compareObjects(a[key], b[key])) return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n","TestCases":[{"Name":"Underscore equal","Code":"underscore.isEqual(obj1, obj1copy);","IsDeferred":false},{"Name":"Lodash equal","Code":"lodash.isEqual(obj1, obj1copy);","IsDeferred":false},{"Name":"JSON Stringify comparison","Code":"JSON.stringify(obj1) === JSON.stringify(obj1copy)","IsDeferred":false},{"Name":"Callback ","Code":"compareObjects(obj1, obj1copy);","IsDeferred":false}]}