@@ -7,33 +7,59 @@ tags: array,compare,equal
77
88``` js
99const 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 ;
2022 }
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 ;
2134
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+ }
2346 }
2447
25- return traverse (array1, array2) ;
26- }
48+ return true ;
49+ };
2750
2851// Usage:
2952const number = 123 ;
3053const array1 = [1 , 2 , 3 , 4 , 5 ];
3154const array2 = [1 , 2 , 3 , 4 , 5 ];
3255const array3 = [[1 , 2 ], [3 , 4 ]];
3356const array4 = [[1 , 2 ], [3 , 4 ]];
57+ const array5 = [{ a: 1 , b: [{ c: 2 }] }, 3 ];
58+ const array6 = [{ a: 1 , b: [{ c: 2 }] }, 3 ];
3459
3560compareArrays (array1, array2); // Returns: true
36- compareArrays (array1, number); // Returns: false
37- compareArrays (array1, array4); // Returns: false
3861compareArrays (array3, array4); // Returns: true
62+ compareArrays (array5, array6); // Returns: true
63+ compareArrays (array1, number); // Returns: false
64+ compareArrays (array3, array6); // Returns: false
3965```
0 commit comments