deep.clone

Simple package to deeply clone any objects with nested objects

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
deep.clone
712.1.25 years ago7 years agoMinified + gzip package size for deep.clone in KB

Readme

deep.clone

Simple and fast deep cloning




!Follow mefollow-me-badgefollow-me-url
!Versionversion-badgeversion-url !Node versionnode-version-badgenode-version-url !MIT Licensemit-license-badgemit-license-url
!Downloadsdownloads-badgedownloads-url !Total downloadstotal-downloads-badgedownloads-url !Packagephobiapackagephobia-badgepackagephobia-url !Bundlephobiabundlephobia-badgebundlephobia-url
!CircleCIcircleci-badgecircleci-url !Dependency Statusdaviddm-badgedaviddm-url !codecovcodecov-badgecodecov-url !Coverage Statuscoveralls-badgecoveralls-url
!codebeat badgecodebeat-badgecodebeat-url !Codacy Badgecodacy-badgecodacy-url !Code of Conductcoc-badgecoc-url
A simple NPM package to do simple and fast deep cloning with JSON.parse + JSON.stringify.

Table of contents

- TypeScript or ES Modules - Node.js - Browser
- [ES Modules](#es-modules)
- [IIFE](#iife)
- deno - deepClone<T>(target, options) - deepCloneSync(target, options)

Pre-requisite

Install

# Install via NPM
$ npm install --save deep.clone

Usage

TypeScript or ES Modules

/** Import project dependencies */
import deepClone from 'deep.clone';

/** Setting up */
const simpleObject = {
  a: {
    b: { c: [1, 2,3] },
    e: [ { f: null } ],
  },
  d: 'deep',
};
const complexObject = {
  a: () => {},
  b: /test/gi,
  c: [1, 2],
  d: new Date(),
  e: { f: 111 },
};

(async () => {
  const clonedSimpleObject = await deepClone(simpleObject);
  const clonedComplexObject = await deepClone(compleObject, {
    absolute: true,
  });
})();

Node.js

/** Import project dependencies */
const { deepClone } = require('deep.clone');

/** Setting up */
const simpleObject = {
  a: {
    b: { c: [1, 2,3] },
    e: [ { f: null } ],
  },
  d: 'deep',
};
const complexObject = {
  a: () => {},
  b: /test/gi,
  c: [1, 2],
  d: new Date(),
  e: { f: 111 },
};

(async () => {
  const clonedSimpleObject = await deepClone(simpleObject);
  const clonedComplexObject = await deepClone(compleObject, {
    absolute: true,
  });
})();

Browser

ES Modules

<script type="module">
  import { deepClone } from 'https://unpkg.com/deep.clone@latest/dist/deep.clone.js';

  deepClone({ ... }) /** Object truncated for brevity */
    .then(console.log);
    .then(console.error);
</script>

IIFE

<script src="https://unpkg.com/deep.clone@latest/dist/deep.clone.iife.js"></script>
<script>
  const { deepClone } = window.DeepClone;

  deepClone({ ... }) /** Object truncated for brevity */
    .then(console.log);
    .then(console.error);
</script>

deno

šŸ‘‰ Check out the deno module at denomod/deepclone.

API Reference

deepClone<T>(target, options)

- target <T> Target to be cloned. - options Objectobject-mdn-url> Optionally set absolute: true for deep cloning complex objects that are not possible with JSON.parse + JSON.stringify.
- `absolute` <[boolean][boolean-mdn-url]> If true, deep clone complex objects.
- returns: <Promisepromise-mdn-url<T>> Promise which resolves with the deeply cloned target.
This method deeply clones a given target with JSON.parse + JSON.stringify asynchronously by default. Set absolute: true for deep cloning complex objects that contain Datedate-mdn-url, RegExpregexp-mdn-url, Functionfunction-mdn-url, etc.

deepCloneSync(target, options)

This methods works the same as deepClone(target[, options]) except that this is the synchronous version.

License

MIT License Ā© Rong Sen Ng