Check if two values deeply match
deepMatch(object, matcher)
All properties and nested objects mentioned in the matcher
are required to be
present in object
.
Library is version of deep-match. Difference:
- in deep-match during comparison of arrays order of items do not matters
- in deep-match2 you can set
options = { arrayOrderMatters: true }
to force that during comparison order of items inobject
andmatcher
should be the same.
// two objects that look exactly the same; // true // additional properties on the left-hand side are ignored; // true // everything on the right-hand side is required; // false // same for arrays; // true; // false
Regular expressions and functions in the matcher
are run against the corresponding values in the object
:
; // true; // false; // true; // true; // false; // true
When matching arrays order of items do not matters by default. To change it you can use additional parameter:
let opts = arrayOrderMatters: true ;; // true; // false; // false // disable checks for undefined items// [,2] is the same as [undefined, 2]; // true // arrayOrderMatters applies also to nested arrays:source = a1: i1: i2: 1 2 31 32 33 4 5 ;matcher = a1: i1: i2: 1 undefined 32 33 5 ;; // false; // false // Note that in case of arrayOrderMatters=false undefined is not skippedsource = a1: i1: i2: 1 2 31 32 33 4 5 ;matcher = a1: i1: i2: 1 undefined 31 undefined 33 5 ;; // true; // false
Rules
Values are compared according to the following rules:
- Identical values always match.
- Values of different types never match.
- Values that are no objects only match if they are identical (see above).
- Null values (which are also objects) only match if both are null.
- Arrays match if all items in the
matcher
match (note different behavior for optionarrayOrderMatters
). - When
arrayOrderMatters=true
value ofundefined
matchers are skipped. - When
arrayOrderMatters=false
(default behavior) value ofundefined
matchers are NOT skipped. - Objects match if all properties in the
matcher
match.
License
MIT