1.3.4 • Published 3 years ago

deep-copy-all v1.3.4

Weekly downloads
44
License
MIT
Repository
github
Last release
3 years ago

deep-copy-all

A fast, compact, and robust method to deep copy all JavaScript data types

GitHub top language GitHub package.json version codebeat badge David NPM Downloads NPM License Twitter

deep-copy-all JavaScript object deep cloner is:

  • fast – ranking highly on common benchmark speed tests

  • compact – about 5k (minified)

  • robust – correctly handling all standard JavaScript data types, as well as custom types

Install

$ npm install deep-copy-all

Usage

Node.js

const deepCopy = require('deep-copy-all');
/* ... */
copy = deepCopy(source);

HTML file:

<script src="dist/deepCopyAll.browser.js"></script>
<script>
  /* ... */
  let copy = deepCopy(source);
</script>

Comparison

The accuracy of deep-copy-all compares well against other deep copying packages.

Legend:     ☑️ - deep copy     🚧 - shallow copy     🗑️ - data loss     ⚠️ - Error

data typeJSON.*ced-cdcclf-cdeep-copy-all
Array☑️☑️☑️☑️☑️☑️☑️
ArrayBuffer🗑️🗑️🗑️☑️🗑️☑️☑️
BigInt⚠️☑️☑️☑️☑️☑️☑️
BigInt64Array⚠️🗑️🗑️🚧☑️☑️☑️
BigUint64Array⚠️🗑️🗑️🚧☑️☑️☑️
Buffer🗑️🗑️🗑️☑️☑️☑️☑️
Date🗑️☑️☑️☑️☑️☑️☑️
Error🗑️🗑️🗑️🚧☑️🚧☑️
Float32Array🗑️🗑️🗑️☑️☑️☑️☑️
Float64Array🗑️🗑️🗑️☑️☑️☑️☑️
Int8Array🗑️🗑️🗑️☑️☑️☑️☑️
Int8Array🗑️🗑️🗑️☑️☑️☑️☑️
Int32Array🗑️🗑️🗑️☑️☑️☑️☑️
Map🗑️🗑️🗑️☑️☑️☑️☑️
Object☑️☑️☑️☑️☑️☑️☑️
RegExp🗑️🗑️🗑️☑️☑️☑️☑️
Set🗑️🗑️🗑️☑️☑️☑️☑️
Uint8Array🗑️🗑️🗑️☑️☑️☑️☑️
Uint8ClampedArray🗑️🗑️🗑️☑️☑️☑️☑️
Uint16Array🗑️🗑️🗑️☑️☑️☑️☑️
Uint32Array🗑️🗑️🗑️☑️☑️☑️☑️
WeakMap🗑️🗑️🗑️🚧⚠️🚧🚧
WeakSet🗑️🗑️🗑️🚧⚠️🚧🚧
enumerable:false🗑️🗑️🗑️🗑️🗑️🗑️☑️
custom Array🗑️🗑️🗑️🗑️🗑️☑️☑️
custom Object🗑️🗑️🗑️🗑️☑️☑️☑️
circular Object⚠️☑️⚠️☑️☑️🗑️☑️

JSON.* - JSON.parse(JSON.stringify()) ce - cloneextend d-c - deep-copy dc - deepcopy cl - clone f-c - fast-copy


deepCopy()

Perform deep copy of a JavaScript object or array.

Syntax

deepCopy(source [, options])

Parameters

source     The item to copy.

options     {Object} optional - Modifies copying behavior.

options properties:

    goDeep        {Boolean} optional - Perform deep copy if true (default).        Set to false to perform shallow copy.

    includeNonEnumerable        {Boolean} optional - Copies non-enumerable properties if true.        Skips non-enumerable properties if false (default).

    detectCircular        {Boolean} optional - Detect circular references if true (default).        May be set to false if source has no circular references.

    maxDepth        {number} optional - The maximum depth to copy, default is 20 levels.

Return value

The copied data.


Performance

The following data types — passed directly to deepCopy or embedded within another object — have been verified to be copied correctly:

  • Array
  • ArrayBuffer
  • Buffer (node.js)
  • Date
  • Error
  • RegExp
  • Int8Array
  • Uint8Array
  • Uint8ClampedArray
  • Int16Array
  • Uint16Array
  • Int32Array
  • Uint32Array
  • Float32Array
  • Float64Array
  • BigInt64Array
  • BigUint64Array
  • Map
  • Set
  • Object
  • custom Array
  • custom Object

Primtive data types are not deep copied. Instead, their values are copied:

  • Number
  • String
  • Boolean
  • undefined
  • BigInt
  • Symbol
  • null

The following object types are not deep copied, as no way has been found to copy them. They are copied by reference only:

  • Function
  • WeakMap
  • WeakSet

Benchmark

In a standard benchmark test of 14 commonly used deep copy modules, deep-copy-all was 4th fastest.

1.3.4

3 years ago

1.3.3

3 years ago

1.3.2

3 years ago

1.3.1

4 years ago

1.2.4

4 years ago

1.2.3

4 years ago

1.2.2

4 years ago

1.2.1

4 years ago

1.2.0

4 years ago

1.1.9

4 years ago

1.1.8

4 years ago

1.1.6

4 years ago

1.1.3

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.0.6

4 years ago

1.1.2

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago