Get the minimal patch to extend literal object A with to transform it into literal object B
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 they hit 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.
importdifffrom'object-diff'consta={speed: 4,power: 54,height: undefined,level: 1,}constb={speed: 4,// unchangedpower: 22,// changedlevel: undefined,// changedweight: 10,// added}diff(a,b)/*{ power: 22, level: undefined, weight: 10,}*/// using a custom equality functionconstpast='2016-04-24T10:39:23.419Z'importcustomfrom'object-diff'custom((a,b)=>{if(ainstanceofDate&&binstanceofDate){returna.getTime()===b.getTime()}returna===b},{then: newDate(past),},{then: newDate(past),},)/*{}*/Versions 0.0.4 and 1.0.0 are functionally equivalent, without known issues, but are CommonJS modules and compatible with older runtimes.