From 4a466a9531f6351ce140a82cdf2f2912bfd8b997 Mon Sep 17 00:00:00 2001 From: Max Ehrlicher-Schmidt Date: Wed, 23 Sep 2020 10:30:12 +0200 Subject: [PATCH] Add deepcopy function --- src/app/services/deepCopy.ts | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/app/services/deepCopy.ts 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