var util = require('util') , deep = require('..') ; var lhs = { name: 'my object', description: 'it\'s an object!', details: { it: 'has', an: 'array', with: ['a', 'few', 'elements'] } }; var rhs = { name: 'updated object', description: 'it\'s an object!', details: { it: 'has', an: 'array', with: ['a', 'few', 'more', 'elements', { than: 'before' }] } }; var differences = deep.diff(lhs, rhs); // Print the differences to the console... util.log(util.inspect(differences, false, 99)); deep.observableDiff(lhs, rhs, function (d) { // Apply all changes except those to the 'name' property... if (d.path.length !== 1 || d.path.join('.') !== 'name') { deep.applyChange(lhs, rhs, d); } }, function (path, key) { var p = (path && path.length) ? path.join('/') : '' util.log('prefilter: path = ' + p + ' key = ' + key); } ); console.log(util.inspect(lhs, false, 99));