@toolz/clone

1.0.2 • Public • Published

clone

clone is a utility for creating deep clones of JavaScript objects and arrays. The functions work recursively, so a massively-nested objecdt/array will still yield a clean "clone" - with no ties to its original. This package was created to deal with this issue:

const originalObject = {
   one: 'uno',
   two: [
      42,
      {
         three: 'tres',
         four: 'quatro',
      },
   ],
}

const copiedObject = originalObject;
copiedObject.two[1].four = 'vier';
console.log(originalObject.two[1].four); // 'vier'
/*
   Even though the updated value was set on copiedObject,
   the changes are reflected in originalObject, 
   because copiedObject holds a reference to originalObject.
 */

Usage

After installation, import the package:

import { clone } from '@toolz/clone';

Methods

.array()

const API = {
   arguments: {
      sourceArray: {
         required,
         format: Array,
      },
   },
   returns: Array,
}

Examples:

const bigHairyNestedArray = [
   'foo',
   1,
   null,
   {},
   [],
   true,
   {
      one: 'one',
      two: 'two',
      three: {
         a: null,
         b: {},
         c: 42,
         d: 3.14,
         e: [
            '1',
            '2',
            '3',
            4,
            null,
         ],
      },
   },
]

const clonedArray = clone.array(bigHairyNestedArray);
clonedArray[6].three.e[3] = 42;
console.log(bigHairyNestedArray[6].three.e[3]); // 4
/*
   clonedArray has all of the elements/levels present in
   bigHairyNestedArray, but changes to clonedArray are 
   not reflected in the source, because it's an independent
   clone
 */

.object()

const API = {
   arguments: {
      sourceObject: {
         required,
         format: Object,
      },
   },
   returns: Object,
}
const bigHairyNestedObject = {
   a: 'foo',
   b: 1,
   c: null,
   d: {},
   e: [],
   f: true,
   g: {
      one: 'one',
      two: 'two',
      three: {
         a: null,
         b: {},
         c: 42,
         d: 3.14,
         e: [
            '1',
            '2',
            '3',
            4,
            null,
         ],
      },
   },
}

const clonedObject = clone.object(bigHairyNestedObject);
clonedObject.g.three.e[3] = 42;
console.log(bigHairyNestedObject.g.three.e[3]); // 4
/*
   clonedObject has all of the elements/levels present in
   bigHairyNestedObject, but changes to clonedObject are 
   not reflected in the source, because it's an independent
   clone
 */

Dependents (1)

Package Sidebar

Install

npm i @toolz/clone

Weekly Downloads

1

Version

1.0.2

License

MIT

Unpacked Size

7.83 kB

Total Files

6

Last publish

Collaborators

  • bytebodger