/deepcopy.js

deep copy data

Primary LanguageJavaScriptMIT LicenseMIT

deepcopy.js

Build Status Dependency Status NPM version Try deepcopy on RunKit

deep copy data

Installation

$ npm install deepcopy

Usage

node.js

via ES Modules

import deepcopy from 'deepcopy';

via CommonJS

const deepcopy = require('deepcopy');

browser

via module

<script type="module">
  import deepcopy from "./dist/deepcopy.min.mjs";
</script>

via script

<script src="./dist/deepcopy.min.js"></script>

Example

basic usage:

const src = {
  desserts: [
    { name: 'cake'      },
    { name: 'ice cream' },
    { name: 'pudding'   }
  ]
};

const dist = deepcopy(src);

src.desserts = null;

console.log(src);   // { desserts: null }
console.log(dist);  // { desserts: [ { name: 'cake' }, { name: 'ice cream' }, { name: 'pudding' } ] }

customize deepcopy:

function MyClass(id) {
  this._id = id;
}

const src = {
  myClasses: [
    new MyClass(1),
    new MyClass(2),
    new MyClass(3)
  ]
};

const dest = deepcopy(base, {
  customizer(value) {
    if (target.constructor === MyClass) {
      return new MyClass(target._id);
    }
  }
});

src.myClasses = null;

console.log(src);   // { myClasses: null }
console.log(dest);  // { myClasses: [ MyClass { _id: 1 }, MyClass { _id: 2 }, MyClass { _id: 3 } ] }

Explanation of build files

  • deepcopy.mjs
    • library bundled
    • ES Modules
  • deepcopy.min.mjs
    • minified deepcopy.mjs
  • deepcopy.js
    • library bundled
    • UMD builds
  • deepcopy.min.js
    • minified deepcopy.js
  • deepcopy.legacy.js
    • compiled for old browsers with @babel/preset-env
      • IE >= 11
      • Android >= 4.4.4
    • library bundled
    • UMD builds
  • deepcopy.legacy.min.js
    • minified deepcopy.legacy.js

scripts are put in dist directory.

Functions

deepcopy(value[, options])

  • value
    • *
      • target value
  • options
    • Object|Function
      • Object - pass options
      • Function - use as customize function
  • return
    • * - copied value

Supported types and copy operation

type operation
ArrayBuffer deep copy
Boolean deep copy
Buffer deep copy node.js only
DataView deep copy
Date deep copy
Number deep copy
RegExp deep copy
String deep copy
Float32Array deep copy
Float64Array deep copy
Int16Array deep copy
Int32Array deep copy
Int8Array deep copy
Uint16Array deep copy
Uint32Array deep copy
Uint8Array deep copy
Uint8ClampedArray deep copy
boolean deep copy
null deep copy
number deep copy
string deep copy
symbol deep copy
undefined deep copy
Arguments deep copy recursively, copy as Array
Array deep copy recursively
Map deep copy recursively
Object deep copy recursively
Set deep copy recursively
Array Iterator shallow copy
Map Iterator shallow copy
Promise shallow copy
Set Iterator shallow copy
String Iterator shallow copy
function shallow copy
global shallow copy window, global, self, etc.
WeakMap shallow copy
WeakSet shallow copy

Test

$ npm install
$ npm test

Contributors

License

The MIT license.