Get the diff from objectA to objectB

object diff

Get the minimal patch to extend objectA with to transform it into objectB

[![npm version][npm-image]][npm-url]

Consider an object retrieved from a server:

    name: 'Peter',
    age: 26,
    height: 187,

Now the user changes stuff using some frontend (e.g. a HTML form) and ends with:

    name: 'Peter',
    age: 27,
    height: 186,

When he hits save, you only want to send off the changed parts to the servers, to save bits (because you're indeed a programmer), but also to avoid any unnecessary "merge conflicts" at the server.

Imagine two users changing the same object; if they did not change the exact same keys of the object, the last user won't erase the first user's changes - in a lot of cases, that's the expected behavior.


npm install object-diff


var diff = require('object-diff');

var a = {
    speed: 4,
    power: 54,
    height: undefined,
    level: 1,

var b = {
    speed: 4,            // unchanged
    power: 22,            // changed
    level: undefined,    // changed
    weight: 10,            // added

diff(a, b);
    power: 22,
    level: undefined,
    weight: 10,

// using a custom equality function

var past = '2016-04-24T10:39:23.419Z';

    equal: dateAwareComparator,
}, {
    then: new Date(past),
}, {
    then: new Date(past),

function dateAwareComparator( a, b ){
    if (a instanceof Date && b instanceof Date)
        return a.getTime() === b.getTime();

    return a === b;


MIT © src.agency / Thomas Jensen [npm-image]: https://img.shields.io/npm/v/object-diff.svg?style=flat [npm-url]: https://npmjs.org/package/object-diff