@darwish/utils-core
Version:
93 lines (92 loc) • 3.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.deepEqualByObject = exports.deepEqualByArray = void 0;
/* eslint-disable @typescript-eslint/no-use-before-define */
var utils_is_1 = require("@darwish/utils-is");
var utils_tools_1 = require("@darwish/utils-tools");
function deepEqualByArray(lfs, rfs, isSort) {
if (isSort === void 0) { isSort = false; }
if (lfs.length !== rfs.length) {
return false;
}
if (isSort) {
lfs.sort();
rfs.sort();
}
for (var i = 0; i < lfs.length; i++) {
if (!deepEqual(lfs[i], rfs[i])) {
return false;
}
}
return true;
}
exports.deepEqualByArray = deepEqualByArray;
function deepEqualByObject(lfs, rfs) {
var key1 = Object.keys(lfs);
var value1 = Object.values(lfs);
var key2 = Object.keys(rfs);
var value2 = Object.values(rfs);
if (key1.length !== key2.length || value1.length !== value2.length) {
return false;
}
key1.sort();
key2.sort();
value1.sort();
value2.sort();
for (var i = 0; i < key1.length; i++) {
if (!deepEqual(key1[i], key2[i])) {
return false;
}
if (!deepEqual(value1[i], value2[i])) {
return false;
}
}
return true;
}
exports.deepEqualByObject = deepEqualByObject;
function deepEqual(lfs, rfs) {
if ((0, utils_tools_1.typeOfData)(lfs) !== (0, utils_tools_1.typeOfData)(rfs))
return false;
var isEqual = lfs === rfs;
if (typeof lfs === 'object' && typeof rfs === 'object') {
if ((0, utils_is_1.isArray)(lfs) && (0, utils_is_1.isArray)(rfs)) {
// array
isEqual = deepEqualByArray(lfs, rfs);
}
else if (((0, utils_is_1.isSet)(lfs) && (0, utils_is_1.isSet)(rfs)) || ((0, utils_is_1.isMap)(lfs) && (0, utils_is_1.isMap)(rfs))) {
// set
var arrLfs = Array.from(lfs);
var arrRfs = Array.from(rfs);
isEqual = deepEqualByArray(arrLfs, arrRfs, true);
}
else if ((0, utils_is_1.isDate)(lfs) && (0, utils_is_1.isDate)(rfs)) {
// date
isEqual = lfs.getTime() === rfs.getTime();
}
else if ((0, utils_is_1.isNull)(lfs) && (0, utils_is_1.isNull)(rfs)) {
// null
isEqual = true;
}
else {
console.log((0, utils_tools_1.typeOfData)(lfs), (0, utils_tools_1.typeOfData)(rfs));
isEqual = deepEqualByObject(lfs, rfs);
}
}
else if (typeof lfs === 'function' && typeof rfs === 'function') {
// function
isEqual = lfs.toString() === rfs.toString();
}
else if (typeof lfs === 'symbol' && typeof rfs === 'symbol') {
// symbol
isEqual = lfs.toString() === rfs.toString();
}
else {
// others
// number && NaN
if ((0, utils_is_1.isNumber)(lfs) && (0, utils_is_1.isNumber)(rfs) && isNaN(lfs) && isNaN(rfs))
return true;
isEqual = lfs === rfs;
}
return isEqual;
}
exports.default = deepEqual;