function diffObjects (left, right) { const leftKeys = Object.keys(left) const rightKeys = Object.keys(right) const keyDiff = _.intersection(leftKeys, rightKeys) .reduce((differentKeys, key) => { if(_.isPlainObject(left[key]) && _.isPlainObject(right[key])) { const diff = diffObjects(left[key], right[key]) if(diff !== true) { differentKeys.push(key) } } else if(Array.isArray(left[key]) && Array.isArray(right[key])) { if(_.difference(left[key], right[key]).length) { differentKeys.push(key) } } else if (left[key] !== right[key]) { differentKeys.push(key) } return differentKeys }, _.difference(leftKeys, rightKeys)) return keyDiff.length ? keyDiff : true }