node package manager
Orgs are free. Discover, share, and reuse code in your team. Create a free org »

deepcopy

deepcopy.js

Build Status Dependency Status NPM version

deep copy for any data

Playground

REPL powered by Tonic

Installation

$ npm install deepcopy

Usage

node.js

var deepcopy = require("deepcopy");

browser

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

Example

basic usage:

var base, copy;
 
base = {
  desserts: [
    { name: "cake"      },
    { name: "ice cream" },
    { name: "pudding"   }
  ]
};
 
copy = deepcopy(base);
base.desserts = null;
 
console.log(base);
// { desserts: null } 
console.log(copy);
// { desserts: [ { name: 'cake' }, { name: 'ice cream' }, { name: 'pudding' } ] } 

customize deepcopy:

function MyClass(id) {
  this._id = id;
}
 
var base, copy;
 
base = {
  myClasses: [
    new MyClass(1),
    new MyClass(2),
    new MyClass(3)
  ]
};
 
copy = deepcopy(base, function(target) {
  if (target.constructor === MyClass) {
    return new MyClass(target._id);
  }
});
base.myClasses = null;
 
console.log(base);
// { myClasses: null } 
console.log(copy);
// { myClasses: [ MyClass { _id: 1 }, MyClass { _id: 2 }, MyClass { _id: 3 } ] } 

Functions

deepcopy(value[, customizer])

  • value
    • * - target value
  • customizer
    • Function - customize function
  • return
    • * - copied value

support types are below:

  • Number
  • String
  • Boolean
  • Null
  • Undefined
  • Function
    • shallow copy if it is native function
  • Date
  • RegExp
  • Array
    • support recursive copy
    • also can copy if it has circular reference
  • Object
    • support recursive copy
    • also can copy if it has circular reference
  • Buffer (node.js only)
  • Symbol

Test

$ npm install
$ npm test

Contributors

License

The MIT license. Please see LICENSE file.