|
2 | 2 | title: Compare Arrays
|
3 | 3 | description: Compares two arrays to check if they are equal.
|
4 | 4 | author: KCSquid
|
5 |
| -tags: array,compare,equal |
| 5 | +tags: array,object,compare,equal |
6 | 6 | ---
|
7 | 7 |
|
8 | 8 | ```js
|
9 |
| -const compareArrays = (array1, array2) => { |
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; |
22 |
| - } |
23 |
| - } |
24 |
| - |
25 |
| - return true; |
| 9 | +const compareArrays = (a, b) => { |
| 10 | + if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false; |
| 11 | + return a.every((v, i) => |
| 12 | + Array.isArray(v) && Array.isArray(b[i]) ? compareArrays(v, b[i]) : |
| 13 | + typeof v === "object" && typeof b[i] === "object" ? compareObjects(v, b[i]) : |
| 14 | + v === b[i] |
| 15 | + ); |
26 | 16 | };
|
27 | 17 |
|
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; |
34 |
| - |
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 |
| - } |
46 |
| - } |
47 |
| - |
48 |
| - return true; |
| 18 | +const compareObjects = (a, b) => { |
| 19 | + if (typeof a !== "object" || typeof b !== "object" || Object.keys(a).length !== Object.keys(b).length) return false; |
| 20 | + return Object.keys(a).every(k => |
| 21 | + Array.isArray(a[k]) && Array.isArray(b[k]) ? compareArrays(a[k], b[k]) : |
| 22 | + typeof a[k] === "object" && typeof b[k] === "object" ? compareObjects(a[k], b[k]) : |
| 23 | + a[k] === b[k] |
| 24 | + ); |
49 | 25 | };
|
50 | 26 |
|
51 | 27 | // Usage:
|
52 |
| -const number = 123; |
53 |
| -const array1 = [1, 2, 3, 4, 5]; |
54 |
| -const array2 = [1, 2, 3, 4, 5]; |
55 |
| -const array3 = [[1, 2], [3, 4]]; |
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]; |
59 |
| - |
60 |
| -compareArrays(array1, array2); // Returns: true |
61 |
| -compareArrays(array3, array4); // Returns: true |
62 |
| -compareArrays(array5, array6); // Returns: true |
63 |
| -compareArrays(array1, number); // Returns: false |
64 |
| -compareArrays(array3, array6); // Returns: false |
| 28 | +compareArrays([1, 2, 3], [1, 2, 3]); // Returns: true |
| 29 | +compareArrays([1, 2, 3], [3, 2, 1]); // Returns: false |
| 30 | +compareArrays([{a:1}], [{a:1}]); // Returns: true |
| 31 | +compareArrays([{a:1}], null); // Returns: false |
65 | 32 | ```
|
0 commit comments