summaryrefslogtreecommitdiff
path: root/packages/frontend/src/utility/deep-equal.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/frontend/src/utility/deep-equal.ts')
-rw-r--r--packages/frontend/src/utility/deep-equal.ts29
1 files changed, 29 insertions, 0 deletions
diff --git a/packages/frontend/src/utility/deep-equal.ts b/packages/frontend/src/utility/deep-equal.ts
new file mode 100644
index 0000000000..c64d82c6cc
--- /dev/null
+++ b/packages/frontend/src/utility/deep-equal.ts
@@ -0,0 +1,29 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export function deepEqual(a: any, b: any): boolean {
+ if (a === b) return true;
+
+ if (a === null) return b === null;
+
+ if (Array.isArray(a) && Array.isArray(b)) {
+ if (a.length !== b.length) return false;
+ for (let i = 0; i < a.length; i++) {
+ if (!deepEqual(a[i], b[i])) return false;
+ }
+ return true;
+ } else if (((typeof a) === 'object') && ((typeof b) === 'object')) {
+ const aks = Object.keys(a);
+ const bks = Object.keys(b);
+ if (aks.length !== bks.length) return false;
+ for (let i = 0; i < aks.length; i++) {
+ const k = aks[i];
+ if (!deepEqual(a[k], b[k])) return false;
+ }
+ return true;
+ }
+
+ return false;
+}