v2
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user