MCPcopy Create free account
hub / github.com/cryptii/cryptii / isEqual

Method isEqual

src/ArrayUtil.js:13–75  ·  view source on GitHub ↗

* Deep comparison of two values. * @param {mixed} a * @param {mixed} b * @return {boolean} True, if equal

(a, b)

Source from the content-addressed store, hash-verified

11 * @return {boolean} True, if equal
12 */
13 static isEqual (a, b) {
14 // compare instance
15 if (a === b) {
16 return true
17 }
18
19 // check null
20 if (a === null && b === null) {
21 return true
22 } else if (a === null || b === null) {
23 return false
24 }
25
26 // check types
27 if (typeof a !== typeof b) {
28 return false
29 }
30
31 // compare arrays
32 if (a instanceof Array) {
33 if (a.length !== b.length) {
34 return false
35 }
36
37 // compare item by item
38 let i = -1
39 let equal = true
40 while (equal && ++i < a.length) {
41 equal = ArrayUtil.isEqual(a[i], b[i])
42 }
43 return equal
44 }
45
46 // compare objects
47 if (a instanceof Object) {
48 // check if object knows how to compare itself to other objects
49 if (typeof a.isEqualTo === 'function') {
50 return a.isEqualTo(b)
51 }
52 if (typeof b.isEqualTo === 'function') {
53 return b.isEqualTo(a)
54 }
55
56 // collect keys of objects
57 const keys = ArrayUtil.unique(Object.keys(a).concat(Object.keys(b)))
58
59 // compare items for each key
60 let i = -1
61 let equal = true
62 while (equal && ++i < keys.length) {
63 const comparingKey = keys[i]
64 equal = ArrayUtil.isEqual(a[comparingKey], b[comparingKey])
65 }
66 return equal
67 }
68
69 // compare dates
70 if (a instanceof Date) {

Callers 1

indexOfSliceMethod · 0.95

Calls 2

isEqualToMethod · 0.80
uniqueMethod · 0.80

Tested by

no test coverage detected