UNPKG

jiff

Version:

JSON diff and patch based on rfc6902

59 lines (47 loc) 1.09 kB
module.exports = deepEquals; /** * Compare 2 JSON values, or recursively compare 2 JSON objects or arrays * @param {object|array|string|number|boolean|null} a * @param {object|array|string|number|boolean|null} b * @returns {boolean} true iff a and b are recursively equal */ function deepEquals(a, b) { if(a === b) { return true; } if(Array.isArray(a) && Array.isArray(b)) { return compareArrays(a, b); } if(typeof a === 'object' && typeof b === 'object') { return compareObjects(a, b); } return false; } function compareArrays(a, b) { if(a.length !== b.length) { return false; } for(var i = 0; i<a.length; ++i) { if(!deepEquals(a[i], b[i])) { return false; } } return true; } function compareObjects(a, b) { if((a === null && b !== null) || (a !== null && b === null)) { return false; } var akeys = Object.keys(a); var bkeys = Object.keys(b); if(akeys.length !== bkeys.length) { return false; } for(var i = 0, k; i<akeys.length; ++i) { k = akeys[i]; if(!(k in b && deepEquals(a[k], b[k]))) { return false; } } return true; }