Skip to content
Snippets Groups Projects
Commit 43332fca authored by Alexander Rose's avatar Alexander Rose
Browse files

added simple deepClone

parent 74990cab
No related branches found
No related tags found
No related merge requests found
......@@ -2,6 +2,7 @@
* Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
const hasOwnProperty = Object.prototype.hasOwnProperty;
......@@ -54,4 +55,27 @@ export function shallowMerge<T>(source: T, ...rest: (Partial<T> | undefined)[]):
}
}
return ret;
}
\ No newline at end of file
}
/** Simple deep clone for number, boolean, string, null, undefined, object, array */
export function deepClone<T>(source: T): T {
if (null === source || "object" !== typeof source) return source;
if (source instanceof Array) {
const copy: any[] = [];
for (let i = 0, len = source.length; i < len; i++) {
copy[i] = deepClone(source[i]);
}
return copy as any as T;
}
if (source instanceof Object) {
const copy: { [k: string]: any } = {};
for (let k in source) {
if (hasOwnProperty.call(source, k)) copy[k] = deepClone(source[k]);
}
return copy as any as T;
}
throw new Error(`Can't clone, type "${typeof source}" unsupported`);
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment