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 withJSON.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
- Node.jsnode-js-url >= 8.9.0
- NPMnpm-url >= 5.5.1 (NPMnpm-url comes with Node.jsnode-js-url so there is no need to install separately.)
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 asdeepClone(target[, options])
except that this is the synchronous version.