@@ -7,33 +7,59 @@ tags: array,compare,equal
7
7
8
8
``` js
9
9
const compareArrays = (array1 , array2 ) => {
10
- if (! Array .isArray (array1) || ! Array .isArray (array2)) return false ;
11
- if (array1 .length !== array2 .length ) return false ;
12
-
13
- const traverse = (arr1 , arr2 ) => {
14
- for (let i = 0 ; i < arr1 .length ; i++ ) {
15
- if (Array .isArray (arr1[i]) && Array .isArray (arr2[i])) {
16
- if (! traverse (arr1[i], arr2[i])) return false ;
17
- } else if (arr1[i] !== arr2[i]) {
18
- return false ;
19
- }
10
+ if (
11
+ ! Array .isArray (array1) || ! Array .isArray (array2) ||
12
+ array1 .length !== array2 .length
13
+ ) return false ;
14
+
15
+ for (let i = 0 ; i < array1 .length ; i++ ) {
16
+ if (Array .isArray (array1[i]) && Array .isArray (array2[i])) {
17
+ if (! compareArrays (array1[i], array2[i])) return false ;
18
+ } else if (typeof array1[i] === " object" && typeof array2[i] === " object" ) {
19
+ if (! compareObjects (array1[i], array2[i])) return false ;
20
+ } else if (array1[i] !== array2[i]) {
21
+ return false ;
20
22
}
23
+ }
24
+
25
+ return true ;
26
+ };
27
+
28
+ const compareObjects = (obj1 , obj2 ) => {
29
+ if (typeof obj1 !== " object" || typeof obj2 !== " object" ) return false ;
30
+
31
+ const keys1 = Object .keys (obj1);
32
+ const keys2 = Object .keys (obj2);
33
+ if (keys1 .length !== keys2 .length ) return false ;
21
34
22
- return true ;
35
+ for (let key of keys1) {
36
+ const val1 = obj1[key];
37
+ const val2 = obj2[key];
38
+
39
+ if (Array .isArray (val1) && Array .isArray (val2)) {
40
+ if (! compareArrays (val1, val2)) return false ;
41
+ } else if (typeof val1 === " object" && typeof val2 === " object" ) {
42
+ if (! compareObjects (val1, val2)) return false ;
43
+ } else if (val1 !== val2) {
44
+ return false ;
45
+ }
23
46
}
24
47
25
- return traverse (array1, array2) ;
26
- }
48
+ return true ;
49
+ };
27
50
28
51
// Usage:
29
52
const number = 123 ;
30
53
const array1 = [1 , 2 , 3 , 4 , 5 ];
31
54
const array2 = [1 , 2 , 3 , 4 , 5 ];
32
55
const array3 = [[1 , 2 ], [3 , 4 ]];
33
56
const array4 = [[1 , 2 ], [3 , 4 ]];
57
+ const array5 = [{ a: 1 , b: [{ c: 2 }] }, 3 ];
58
+ const array6 = [{ a: 1 , b: [{ c: 2 }] }, 3 ];
34
59
35
60
compareArrays (array1, array2); // Returns: true
36
- compareArrays (array1, number); // Returns: false
37
- compareArrays (array1, array4); // Returns: false
38
61
compareArrays (array3, array4); // Returns: true
62
+ compareArrays (array5, array6); // Returns: true
63
+ compareArrays (array1, number); // Returns: false
64
+ compareArrays (array3, array6); // Returns: false
39
65
```
0 commit comments