File tree 1 file changed +17
-10
lines changed
1 file changed +17
-10
lines changed Original file line number Diff line number Diff line change 1
1
const isObject = ( object : unknown ) : object is Record < string , unknown > => {
2
- return object !== null && typeof object === 'object'
2
+ return object !== null && ! Array . isArray ( object ) && typeof object === 'object'
3
3
}
4
4
5
5
const deepEqual = ( object1 : unknown , object2 : unknown ) : boolean => {
6
+ if ( object1 === object2 ) {
7
+ return true
8
+ }
9
+
10
+ if ( Array . isArray ( object1 ) && Array . isArray ( object2 ) ) {
11
+ if ( object1 . length !== object2 . length ) {
12
+ return false
13
+ }
14
+ return object1 . every ( ( val , index ) => deepEqual ( val , object2 [ index ] ) )
15
+ }
16
+
17
+ if ( Array . isArray ( object1 ) !== Array . isArray ( object2 ) ) {
18
+ return false
19
+ }
20
+
6
21
if ( ! isObject ( object1 ) || ! isObject ( object2 ) ) {
7
22
return object1 === object2
8
23
}
9
24
10
25
const keys1 = Object . keys ( object1 )
11
26
const keys2 = Object . keys ( object2 )
12
-
13
27
if ( keys1 . length !== keys2 . length ) {
14
28
return false
15
29
}
16
30
17
- return keys1 . every ( ( key ) => {
18
- const val1 = object1 [ key ]
19
- const val2 = object2 [ key ]
20
- if ( isObject ( val1 ) && isObject ( val2 ) ) {
21
- return deepEqual ( val1 , val2 )
22
- }
23
- return val1 === val2
24
- } )
31
+ return keys1 . every ( ( key ) => deepEqual ( object1 [ key ] , object2 [ key ] ) )
25
32
}
26
33
27
34
export default deepEqual
You can’t perform that action at this time.
0 commit comments