UNPKG

ascor

Version:

一些常用的简单的js工具

66 lines (65 loc) 2.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isDeepEqual = void 0; var isObject_1 = require("./isObject"); var isArray_1 = require("./isArray"); var isNumber_1 = require("./isNumber"); var isTypeEqual_1 = require("./isTypeEqual"); /** * 判断两个值是否相等,如果是嵌套对象则递归检查,暂不支持函数判断,如果对象存在函数方法,则会返回false * @param a * @param b * @return Boolean 返回布尔值 */ exports.isDeepEqual = function (a, b) { // 不同类型返回false if (!isTypeEqual_1.isTypeEqual(a, b)) { return false; } //全等于返回true if (a === b) { return true; } //对于NaN===NaN => false ,我们要让他变为true,当他是相等的 if (isNaN(a) && isNaN(b) && isNumber_1.isNumber(a) && isNumber_1.isNumber(b)) { return true; } //对象类型判断 if (isObject_1.isObject(a) && isObject_1.isObject(b)) { if (Object.keys(a).length !== Object.keys(b).length) { return false; } for (var key in a) { if (a.hasOwnProperty(key)) { if (!exports.isDeepEqual(a[key], b[key])) { return false; } } } return true; } //数组类型判断,不按顺序,深度递归检测 if (isArray_1.isArray(a) && isArray_1.isArray(b)) { if (a.length !== b.length) { return false; } var tmp = []; for (var i = 0; i < a.length; i++) { var f = false; for (var j = 0; j < b.length; j++) { if (!tmp.includes(j)) { if (exports.isDeepEqual(a[i], b[j])) { f = true; tmp.push(j); break; } } } if (!f) { return false; } } return tmp.length === b.length; } return false; };