diff --git a/src/app/services/deepCopy.ts b/src/app/services/deepCopy.ts new file mode 100644 index 0000000..3f8e21a --- /dev/null +++ b/src/app/services/deepCopy.ts @@ -0,0 +1,33 @@ +export function deepCopy(obj) { + var copy: any; + + // Handle the 3 simple types, and null or undefined + if (null == obj || "object" != typeof obj) return obj; + + // Handle Date + if (obj instanceof Date) { + copy = new Date(); + copy.setTime(obj.getTime()); + return copy; + } + + // Handle Array + if (obj instanceof Array) { + copy = []; + for (var i = 0, len = obj.length; i < len; i++) { + copy[i] = deepCopy(obj[i]); + } + return copy; + } + + // Handle Object + if (obj instanceof Object) { + copy = {}; + for (var attr in obj) { + if (obj.hasOwnProperty(attr)) copy[attr] = deepCopy(obj[attr]); + } + return copy; + } + + throw new Error("Unable to copy obj! Its type isn't supported."); +} \ No newline at end of file