This commit is contained in:
2025-04-14 10:27:58 +03:00
parent f977d6b3d4
commit 7e798a7a83
55 changed files with 5625 additions and 353 deletions

View File

@@ -1,8 +1,34 @@
export function isObjEqual<Type>(obj1: Type, obj2: Type): boolean {
return obj1 && obj2 && Object.keys(obj1).length === Object.keys(obj2).length &&
(Object.keys(obj1) as (keyof typeof obj1)[]).every(key => {
return Object.prototype.hasOwnProperty.call(obj2, key) && obj1[key] === obj2[key]
})
export function isObjEqual(a: object, b: object): boolean {
// Сравнение примитивов и null/undefined
if (a === b) return true
if (!a || !b) return false
if (Object.keys(a).length !== Object.keys(b).length) return false
// Получаем все уникальные ключи из обоих объектов
const allKeys = new Set([
...Object.keys(a),
...Object.keys(b)
])
// Проверяем каждое свойство
for (const key of allKeys) {
const valA = a[key as keyof typeof a]
const valB = b[key as keyof typeof b]
// Если одно из значений undefined - объекты разные
if (valA === undefined || valB === undefined) return false
// Рекурсивное сравнение для вложенных объектов
if (typeof valA === 'object' && typeof valB === 'object') {
if (!isObjEqual(valA, valB)) return false
}
// Сравнение примитивов
else if (!Object.is(valA, valB)) {
return false
}
}
return true
}
export function parseIntString (s: string | string[] | undefined) :number | null {