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

added simple deepClone

parent 74990cab
Branches
Tags
No related merge requests found
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
* Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info. * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
* *
* @author David Sehnal <david.sehnal@gmail.com> * @author David Sehnal <david.sehnal@gmail.com>
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/ */
const hasOwnProperty = Object.prototype.hasOwnProperty; const hasOwnProperty = Object.prototype.hasOwnProperty;
...@@ -54,4 +55,27 @@ export function shallowMerge<T>(source: T, ...rest: (Partial<T> | undefined)[]): ...@@ -54,4 +55,27 @@ export function shallowMerge<T>(source: T, ...rest: (Partial<T> | undefined)[]):
} }
} }
return ret; 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