Skip to content

Deep diffs two objects, including nested structures of arrays and objects, and returns the difference. ❄️

License

Notifications You must be signed in to change notification settings

mattphillips/deep-object-diff

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

89 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 https://github.com/sanukerinc/deep-object-diff.git

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': {  after: 'z'  }  },  d: {  after: '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': {  before: 'b'  }  },  e: {  before: 'Hello, world!'  }  }  } } */

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: {  before: 'world'  after: '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': {  after: 'z'  }  },  d: {  after: 'Hello, world!'  }  }  }  },  deleted: {  foo: {  bar: {  a: {  '1': {  before: 'b'  }  },  e: {  before: 100  }  }  }  },  updated: {  buzz: {  before: 'world'  after: 'fizz'  }  } } */

License

MIT

About

Deep diffs two objects, including nested structures of arrays and objects, and returns the difference. ❄️

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Contributors 8