Skip to content

Commit 472bbfb

Browse files
committed
add support for object comparison in arrays (new function compareObjects), update usage
1 parent a06fbfb commit 472bbfb

File tree

2 files changed

+42
-16
lines changed

2 files changed

+42
-16
lines changed

public/consolidated/javascript.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"equal"
1313
],
1414
"contributors": [],
15-
"code": "const compareArrays = (array1, array2) => {\n if (!Array.isArray(array1) || !Array.isArray(array2)) return false;\n if (array1.length !== array2.length) return false;\n\n const traverse = (arr1, arr2) => {\n for (let i = 0; i < arr1.length; i++) {\n if (Array.isArray(arr1[i]) && Array.isArray(arr2[i])) {\n if (!traverse(arr1[i], arr2[i])) return false;\n } else if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n return traverse(array1, array2);\n}\n\n// Usage:\nconst number = 123;\nconst array1 = [1, 2, 3, 4, 5];\nconst array2 = [1, 2, 3, 4, 5];\nconst array3 = [[1, 2], [3, 4]];\nconst array4 = [[1, 2], [3, 4]];\n\ncompareArrays(array1, array2); // Returns: true\ncompareArrays(array1, number); // Returns: false\ncompareArrays(array1, array4); // Returns: false\ncompareArrays(array3, array4); // Returns: true\n"
15+
"code": "const compareArrays = (array1, array2) => {\n if (\n !Array.isArray(array1) || !Array.isArray(array2) ||\n array1.length !== array2.length\n ) return false;\n\n for (let i = 0; i < array1.length; i++) {\n if (Array.isArray(array1[i]) && Array.isArray(array2[i])) {\n if (!compareArrays(array1[i], array2[i])) return false;\n } else if (typeof array1[i] === \"object\" && typeof array2[i] === \"object\") {\n if (!compareObjects(array1[i], array2[i])) return false;\n } else if (array1[i] !== array2[i]) {\n return false;\n }\n }\n\n return true;\n};\n\nconst compareObjects = (obj1, obj2) => {\n if (typeof obj1 !== \"object\" || typeof obj2 !== \"object\") return false;\n\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length) return false;\n\n for (let key of keys1) {\n const val1 = obj1[key];\n const val2 = obj2[key];\n\n if (Array.isArray(val1) && Array.isArray(val2)) {\n if (!compareArrays(val1, val2)) return false;\n } else if (typeof val1 === \"object\" && typeof val2 === \"object\") {\n if (!compareObjects(val1, val2)) return false;\n } else if (val1 !== val2) {\n return false;\n }\n }\n\n return true;\n};\n\n// Usage:\nconst number = 123;\nconst array1 = [1, 2, 3, 4, 5];\nconst array2 = [1, 2, 3, 4, 5];\nconst array3 = [[1, 2], [3, 4]];\nconst array4 = [[1, 2], [3, 4]];\nconst array5 = [{ a: 1, b: [{ c: 2 }] }, 3];\nconst array6 = [{ a: 1, b: [{ c: 2 }] }, 3];\n\ncompareArrays(array1, array2); // Returns: true\ncompareArrays(array3, array4); // Returns: true\ncompareArrays(array5, array6); // Returns: true\ncompareArrays(array1, number); // Returns: false\ncompareArrays(array3, array6); // Returns: false\n"
1616
},
1717
{
1818
"title": "Partition Array",

snippets/javascript/array-manipulation/compare-arrays.md

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,59 @@ tags: array,compare,equal
77

88
```js
99
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;
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:
2952
const number = 123;
3053
const array1 = [1, 2, 3, 4, 5];
3154
const array2 = [1, 2, 3, 4, 5];
3255
const array3 = [[1, 2], [3, 4]];
3356
const array4 = [[1, 2], [3, 4]];
57+
const array5 = [{ a: 1, b: [{ c: 2 }] }, 3];
58+
const array6 = [{ a: 1, b: [{ c: 2 }] }, 3];
3459

3560
compareArrays(array1, array2); // Returns: true
36-
compareArrays(array1, number); // Returns: false
37-
compareArrays(array1, array4); // Returns: false
3861
compareArrays(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

Comments
 (0)