npm.io
1.3.4 • Published 5 years ago

deep-copy-all

Licence
MIT
Version
1.3.4
Deps
0
Size
99 kB
Vulns
0
Weekly
0
Stars
4

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 type JSON.* ce d-c dc cl f-c deep-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.

Keywords