crud-object-diff
Version:
Helper utilities to compare objects or arrays for obtaining created, updated, & deleted values.
90 lines • 2.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isEqualArray = exports.isEqualObject = void 0;
/**
* Check if two objects are equal w/ deep comparison
* @param {Object} a
* @param {Object} b
* @returns {boolean}
*/
function isEqualObject(a, b) {
if (Array.isArray(a) && Array.isArray(b))
return isEqualArray(a, b);
if (typeof a !== 'object' && typeof b !== 'object')
return Object.is(a, b);
if (checkNullAndUndefined(a, b))
return false;
if (checkBothNullOrUndefined(a, b))
return true;
var aProps = Object.getOwnPropertyNames(a);
var bProps = Object.getOwnPropertyNames(b);
if (aProps.length !== bProps.length)
return false;
var i = 0;
while (i < aProps.length) {
var propName = aProps[i];
if (typeof a[propName] == 'object' && typeof b[propName] == 'object') {
if (Array.isArray(a[propName]) && Array.isArray(b[propName])) {
if (!isEqualArray(a[propName], b[propName]))
return false;
}
else if (!isEqualObject(a[propName], b[propName]))
return false;
}
else if (bProps.indexOf(propName) == -1 ||
!Object.is(a[propName], b[propName])) {
return false;
}
i++;
}
return true;
}
exports.isEqualObject = isEqualObject;
function checkNullAndUndefined(a, b) {
if (a === null && b !== null ||
a !== null && b === null ||
a === undefined && b !== undefined ||
a !== undefined && b === undefined) {
return true;
}
return false;
}
function checkBothNullOrUndefined(a, b) {
if (a === null && b === null ||
a === undefined && b === undefined) {
return true;
}
return false;
}
/**
* Check if two arrays are equal w/ deep comparison
* @param {Array.<*>} a
* @param {Array.<*>} b
* @returns {boolean}
*/
function isEqualArray(a, b) {
if (checkNullAndUndefined(a, b))
return false;
if (checkBothNullOrUndefined(a, b))
return true;
if (a.length !== b.length) {
return false;
}
var i = 0;
while (i < a.length) {
if (typeof a[i] !== 'object' && b.indexOf(a[i]) === -1)
return false;
else if (typeof a[i] === 'object' &&
!Array.isArray(a[i]) &&
!isEqualObject(a[i], b[i]))
return false;
else if (Array.isArray(a[i]) &&
Array.isArray(b[i]) &&
!isEqualArray(a[i], b[i]))
return false;
i++;
}
return true;
}
exports.isEqualArray = isEqualArray;
//# sourceMappingURL=helpers.js.map