Nectar of the Programming Masses

    @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
     */

    Install

    npm i @toolz/clone

    DownloadsWeekly Downloads

    10

    Version

    1.0.2

    License

    MIT

    Unpacked Size

    7.83 kB

    Total Files

    6

    Last publish

    Collaborators

    • bytebodger