UNPKG

1.76 kBJavaScriptView Raw
1var Stack = require('./_Stack'),
2 baseIsEqual = require('./_baseIsEqual');
3
4/** Used to compose bitmasks for value comparisons. */
5var COMPARE_PARTIAL_FLAG = 1,
6 COMPARE_UNORDERED_FLAG = 2;
7
8/**
9 * The base implementation of `_.isMatch` without support for iteratee shorthands.
10 *
11 * @private
12 * @param {Object} object The object to inspect.
13 * @param {Object} source The object of property values to match.
14 * @param {Array} matchData The property names, values, and compare flags to match.
15 * @param {Function} [customizer] The function to customize comparisons.
16 * @returns {boolean} Returns `true` if `object` is a match, else `false`.
17 */
18function baseIsMatch(object, source, matchData, customizer) {
19 var index = matchData.length,
20 length = index,
21 noCustomizer = !customizer;
22
23 if (object == null) {
24 return !length;
25 }
26 object = Object(object);
27 while (index--) {
28 var data = matchData[index];
29 if ((noCustomizer && data[2])
30 ? data[1] !== object[data[0]]
31 : !(data[0] in object)
32 ) {
33 return false;
34 }
35 }
36 while (++index < length) {
37 data = matchData[index];
38 var key = data[0],
39 objValue = object[key],
40 srcValue = data[1];
41
42 if (noCustomizer && data[2]) {
43 if (objValue === undefined && !(key in object)) {
44 return false;
45 }
46 } else {
47 var stack = new Stack;
48 if (customizer) {
49 var result = customizer(objValue, srcValue, key, object, source, stack);
50 }
51 if (!(result === undefined
52 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
53 : result
54 )) {
55 return false;
56 }
57 }
58 }
59 return true;
60}
61
62module.exports = baseIsMatch;