UNPKG

@gvray/eskit

Version:

A rich and colorful toolkit about typescript and javascript.

99 lines 3.26 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var isObjectLike_1 = __importDefault(require("./isObjectLike")); var isArrayLike_1 = __importDefault(require("./isArrayLike")); var isString_1 = __importDefault(require("./isString")); /** * Performs deep equality comparison between two values. * 执行两个值之间的深度相等比较。 * * @param value - The first value to compare / 要比较的第一个值 * @param other - The second value to compare / 要比较的第二个值 * @returns True if the values are deeply equal / 如果值深度相等则返回true * * @example * ```typescript * // Primitive values * isEqual(1, 1) // true * isEqual('hello', 'hello') // true * isEqual(true, true) // true * isEqual(null, null) // true * isEqual(undefined, undefined) // true * * // Different primitive values * isEqual(1, 2) // false * isEqual('hello', 'world') // false * isEqual(null, undefined) // false * * // Arrays * isEqual([1, 2, 3], [1, 2, 3]) // true * isEqual(['a', 'b'], ['a', 'b']) // true * isEqual([1, 2], [1, 2, 3]) // false (different lengths) * isEqual([1, 2], [2, 1]) // false (different order) * * // Nested arrays * isEqual([[1, 2], [3, 4]], [[1, 2], [3, 4]]) // true * isEqual([[1, 2], [3, 4]], [[1, 2], [3, 5]]) // false * * // Objects * isEqual({ a: 1, b: 2 }, { a: 1, b: 2 }) // true * isEqual({ a: 1, b: 2 }, { b: 2, a: 1 }) // true (key order doesn't matter) * isEqual({ a: 1 }, { a: 1, b: 2 }) // false (different keys) * * // Nested objects * isEqual({ a: { b: { c: 1 } } }, { a: { b: { c: 1 } } }) // true * isEqual({ a: { b: { c: 1 } } }, { a: { b: { c: 2 } } }) // false * * // Mixed structures * const obj1 = { users: [{ name: 'Alice', age: 25 }], count: 1 } * const obj2 = { users: [{ name: 'Alice', age: 25 }], count: 1 } * isEqual(obj1, obj2) // true * ``` * * @since 1.0.0 */ var isEqual = function (value, other) { if (value === other) { return true; } if (!value || !other) { return false; } if ((0, isString_1.default)(value) || (0, isString_1.default)(other)) { return false; } if ((0, isArrayLike_1.default)(value) || (0, isArrayLike_1.default)(other)) { if (value.length !== other.length) { return false; } var rst = true; for (var i = 0; i < value.length; i++) { rst = isEqual(value[i], other[i]); if (!rst) { break; } } return rst; } if ((0, isObjectLike_1.default)(value) || (0, isObjectLike_1.default)(other)) { var valueKeys = Object.keys(value); var otherKeys = Object.keys(other); if (valueKeys.length !== otherKeys.length) { return false; } var rst = true; for (var i = 0; i < valueKeys.length; i++) { rst = isEqual(value[valueKeys[i]], other[valueKeys[i]]); if (!rst) { break; } } return rst; } return false; }; exports.default = isEqual; //# sourceMappingURL=isEqual.js.map