Nostradamus Prophecy Machine

    deep-object-diff
    TypeScript icon, indicating that this package has built-in type declarations

    1.1.0 • Public • Published

    deep-object-diff

    ❄️

    Deep diff two JavaScript Objects


    Build Status Code Coverage version downloads MIT License PRs Welcome

    A small library that can deep diff two JavaScript Objects, including nested structures of arrays and objects.

    Installation

    yarn add deep-object-diff

    npm i --save deep-object-diff

    Functions available:

    Importing

    ES6 / Babel:

    import { diff, addedDiff, deletedDiff, updatedDiff, detailedDiff } from 'deep-object-diff';

    ES5:

    const { diff, addedDiff, deletedDiff, detailedDiff, updatedDiff } = require("deep-object-diff");
     
    // OR
     
    const diff = require("deep-object-diff").diff;
    const addedDiff = require("deep-object-diff").addedDiff;
    const deletedDiff = require("deep-object-diff").deletedDiff;
    const detailedDiff = require("deep-object-diff").detailedDiff;
    const updatedDiff = require("deep-object-diff").updatedDiff;

    Usage:

    diff:

    const lhs = {
      foo: {
        bar: {
          a: ['a', 'b'],
          b: 2,
          c: ['x', 'y'],
          e: 100 // deleted
        }
      },
      buzz: 'world'
    };
     
    const rhs = {
      foo: {
        bar: {
          a: ['a'], // index 1 ('b')  deleted
          b: 2, // unchanged
          c: ['x', 'y', 'z'], // 'z' added
          d: 'Hello, world!' // added
        }
      },
      buzz: 'fizz' // updated
    };
     
    console.log(diff(lhs, rhs)); // =>
    /*
    {
      foo: {
        bar: {
          a: {
            '1': undefined
          },
          c: {
            '2': 'z'
          },
          d: 'Hello, world!',
          e: undefined
        }
      },
      buzz: 'fizz'
    }
    */

    addedDiff:

    const lhs = {
      foo: {
        bar: {
          a: ['a', 'b'],
          b: 2,
          c: ['x', 'y'],
          e: 100 // deleted
        }
      },
      buzz: 'world'
    };
     
    const rhs = {
      foo: {
        bar: {
          a: ['a'], // index 1 ('b')  deleted
          b: 2, // unchanged
          c: ['x', 'y', 'z'], // 'z' added
          d: 'Hello, world!' // added
        }
      },
      buzz: 'fizz' // updated
    };
     
    console.log(addedDiff(lhs, rhs));
     
    /*
    {
      foo: {
        bar: {
          c: {
            '2': 'z'
          },
          d: 'Hello, world!'
        }
      }
    }
    */

    deletedDiff:

    const lhs = {
      foo: {
        bar: {
          a: ['a', 'b'],
          b: 2,
          c: ['x', 'y'],
          e: 100 // deleted
        }
      },
      buzz: 'world'
    };
     
    const rhs = {
      foo: {
        bar: {
          a: ['a'], // index 1 ('b')  deleted
          b: 2, // unchanged
          c: ['x', 'y', 'z'], // 'z' added
          d: 'Hello, world!' // added
        }
      },
      buzz: 'fizz' // updated
    };
     
    console.log(deletedDiff(lhs, rhs));
     
    /*
    {
      foo: {
        bar: {
          a: {
            '1': undefined
          },
          e: undefined
        }
      }
    }
    */

    updatedDiff:

    const lhs = {
      foo: {
        bar: {
          a: ['a', 'b'],
          b: 2,
          c: ['x', 'y'],
          e: 100 // deleted
        }
      },
      buzz: 'world'
    };
     
    const rhs = {
      foo: {
        bar: {
          a: ['a'], // index 1 ('b')  deleted
          b: 2, // unchanged
          c: ['x', 'y', 'z'], // 'z' added
          d: 'Hello, world!' // added
        }
      },
      buzz: 'fizz' // updated
    };
     
    console.log(updatedDiff(lhs, rhs));
     
    /*
    {
      buzz: 'fizz'
    }
    */

    detailedDiff:

    const lhs = {
      foo: {
        bar: {
          a: ['a', 'b'],
          b: 2,
          c: ['x', 'y'],
          e: 100 // deleted
        }
      },
      buzz: 'world'
    };
     
    const rhs = {
      foo: {
        bar: {
          a: ['a'], // index 1 ('b')  deleted
          b: 2, // unchanged
          c: ['x', 'y', 'z'], // 'z' added
          d: 'Hello, world!' // added
        }
      },
      buzz: 'fizz' // updated
    };
     
    console.log(detailedDiff(lhs, rhs));
     
    /*
    {
      added: {
        foo: {
          bar: {
            c: {
              '2': 'z'
            },
            d: 'Hello, world!'
          }
        }
      },
      deleted: {
        foo: {
          bar: {
            a: {
              '1': undefined
            },
            e: undefined
          }
        }
      },
      updated: {
        buzz: 'fizz'
      }
    }
    */

    License

    MIT

    Install

    npm i deep-object-diff

    DownloadsWeekly Downloads

    2,288,976

    Version

    1.1.0

    License

    MIT

    Last publish

    Collaborators

    • avatar