simple-deep-clone.ts 993 B

12345678910111213141516171819202122232425262728293031323334
  1. import { isClassInstance } from './shared-utils';
  2. /**
  3. * An extremely fast function for deep-cloning an object which only contains simple
  4. * values, i.e. primitives, arrays and nested simple objects.
  5. */
  6. export function simpleDeepClone<T extends string | number | any[] | object>(input: T): T {
  7. // if not array or object or is null return self
  8. if (typeof input !== 'object' || input === null) {
  9. return input;
  10. }
  11. let output: any;
  12. let i: number | string;
  13. // handle case: array
  14. if (input instanceof Array) {
  15. let l;
  16. output = [] as any[];
  17. for (i = 0, l = input.length; i < l; i++) {
  18. output[i] = simpleDeepClone(input[i]);
  19. }
  20. return output;
  21. }
  22. if (isClassInstance(input)) {
  23. return input;
  24. }
  25. // handle case: object
  26. output = {};
  27. for (i in input) {
  28. if (input.hasOwnProperty(i)) {
  29. output[i] = simpleDeepClone((input as any)[i]);
  30. }
  31. }
  32. return output;
  33. }