Skip to content

Commit 6d4d53a

Browse files
committed
make significantly shorter, use ternary operator for comparisons when possible, switch to strict equality, use every instead of loop for one liner, add object tag
1 parent 472bbfb commit 6d4d53a

File tree

2 files changed

+21
-53
lines changed

2 files changed

+21
-53
lines changed

public/consolidated/javascript.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@
88
"author": "KCSquid",
99
"tags": [
1010
"array",
11+
"object",
1112
"compare",
1213
"equal"
1314
],
1415
"contributors": [],
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"
16+
"code": "const compareArrays = (a, b) => {\n if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;\n return a.every((v, i) => \n Array.isArray(v) && Array.isArray(b[i]) ? compareArrays(v, b[i]) :\n typeof v === \"object\" && typeof b[i] === \"object\" ? compareObjects(v, b[i]) :\n v === b[i]\n );\n};\n\nconst compareObjects = (a, b) => {\n if (typeof a !== \"object\" || typeof b !== \"object\" || Object.keys(a).length !== Object.keys(b).length) return false;\n return Object.keys(a).every(k => \n Array.isArray(a[k]) && Array.isArray(b[k]) ? compareArrays(a[k], b[k]) :\n typeof a[k] === \"object\" && typeof b[k] === \"object\" ? compareObjects(a[k], b[k]) :\n a[k] === b[k]\n );\n};\n\n// Usage:\ncompareArrays([1, 2, 3], [1, 2, 3]); // Returns: true\ncompareArrays([1, 2, 3], [3, 2, 1]); // Returns: false\ncompareArrays([{a:1}], [{a:1}]); // Returns: true\ncompareArrays([{a:1}], null); // Returns: false\n"
1617
},
1718
{
1819
"title": "Partition Array",

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

Lines changed: 19 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2,64 +2,31 @@
22
title: Compare Arrays
33
description: Compares two arrays to check if they are equal.
44
author: KCSquid
5-
tags: array,compare,equal
5+
tags: array,object,compare,equal
66
---
77

88
```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+
);
2616
};
2717

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+
);
4925
};
5026

5127
// 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
6532
```

0 commit comments

Comments
 (0)