simple-deep-clone.ts 839 B

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