UNPKG

object-diff

Version:

Get the diff from objectA to objectB

101 lines (76 loc) 1.68 kB
# 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: ```js { name: 'Peter', age: 26, height: 187, } ``` Now the user changes stuff using some frontend (e.g. a HTML form) and ends with: ```js { 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. ## Install ``` npm install object-diff ``` ## Usage ```js 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'; diff.custom({ 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; } ``` ## License [MIT](http://opensource.org/licenses/MIT) © [src.agency](http://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