Projekt

Obecné

Profil

Stáhnout (1.72 KB) Statistiky
| Větev: | Revize:
1 3a515b92 cagy
var Stack = require('./_Stack'),
2
    baseIsEqual = require('./_baseIsEqual');
3
4
/** Used to compose bitmasks for value comparisons. */
5
var 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
 */
18
function 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
62
module.exports = baseIsMatch;