
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 in object
and matcher
should be the same.
deepMatch({ a: 1, b: 2 } }, { a: 1, b: 2 });
deepMatch({ a: 1, b: 2 } }, { a: 1 });
deepMatch({ a: 1 } }, { a: 1, b: 2 });
deepMatch([1, 2, 3], [1, 2]);
deepMatch([1, 2, 3], [3, 4]);
Regular expressions and functions in the matcher
are run against the corresponding values in the object
:
deepMatch('aaa', /a+/);
deepMatch('bbb', /a+/);
deepMatch(['aaa', 'bbb'], [/a+/]);
deepMatch(['aaa', 'bbb'], [/a+/, /b+/]);
deepMatch(['aaa', 'ccc'], [/a+/, /b+/]);
deepMatch([1, 2, 3], [v => v === 1]);
When matching arrays order of items do not matters by default. To change it you can use additional parameter:
let opts = { arrayOrderMatters: true };
deepMatch([1, 2], [1, 2], opts);
deepMatch([1, 2], [2, 1], opts);
deepMatch([1, 2], [ 2], opts);
deepMatch([1, 2], [ , 2], opts);
source = { a1: [ {i1: []}, {i2: [1, 2, [31, 32, 33], 4, 5]} ]};
matcher = { a1: [ {i1: []}, {i2: [1, undefined, [32, 33 ], , 5]} ]};
deepMatch(source, matcher, opts);
deepMatch(source, matcher);
source = { a1: [ {i1: []}, {i2: [1, 2, [31, 32, 33], 4, 5]} ]};
matcher = { a1: [ {i1: []}, {i2: [1, undefined, [31, undefined, 33], , 5]} ]};
deepMatch(source, matcher, opts);
deepMatch(source, matcher);
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 option arrayOrderMatters
).
- When
arrayOrderMatters=true
value of undefined
matchers are skipped.
- When
arrayOrderMatters=false
(default behavior) value of undefined
matchers are NOT skipped.
- Objects match if all properties in the
matcher
match.
License
MIT