ts-prime
Version:
A utility library for JavaScript and Typescript.
70 lines (69 loc) • 1.94 kB
JavaScript
import { purry } from './purry';
// from https://github.com/epoberezkin/fast-deep-equal/blob/master/index.js
var isArray = Array.isArray;
var keyList = Object.keys;
var hasProp = Object.prototype.hasOwnProperty;
export function equals() {
return purry(_equals, arguments);
}
function _equals(a, b) {
if (a === b) {
return true;
}
if (a && b && typeof a === 'object' && typeof b === 'object') {
var arrA = isArray(a);
var arrB = isArray(b);
var i = void 0;
var length = void 0;
var key = void 0;
if (arrA && arrB) {
length = a.length;
if (length !== b.length) {
return false;
}
for (i = length; i-- !== 0;) {
if (!equals(a[i], b[i])) {
return false;
}
}
return true;
}
if (arrA !== arrB) {
return false;
}
var dateA = a instanceof Date;
var dateB = b instanceof Date;
if (dateA !== dateB) {
return false;
}
if (dateA && dateB) {
return a.getTime() === b.getTime();
}
var regexpA = a instanceof RegExp;
var regexpB = b instanceof RegExp;
if (regexpA !== regexpB) {
return false;
}
if (regexpA && regexpB) {
return a.toString() === b.toString();
}
var keys = keyList(a);
length = keys.length;
if (length !== keyList(b).length) {
return false;
}
for (i = length; i-- !== 0;) {
if (!hasProp.call(b, keys[i])) {
return false;
}
}
for (i = length; i-- !== 0;) {
key = keys[i];
if (!equals(a[key], b[key])) {
return false;
}
}
return true;
}
return a !== a && b !== b;
}