mirror of
https://github.com/atlanticbiomedical/biomedjs.git
synced 2025-07-02 00:47:26 -04:00
48 lines
1.2 KiB
JavaScript
48 lines
1.2 KiB
JavaScript
![]() |
var baseIsMatch = require('./baseIsMatch'),
|
||
|
constant = require('../utility/constant'),
|
||
|
isStrictComparable = require('./isStrictComparable'),
|
||
|
keys = require('../object/keys'),
|
||
|
toObject = require('./toObject');
|
||
|
|
||
|
/**
|
||
|
* The base implementation of `_.matches` which does not clone `source`.
|
||
|
*
|
||
|
* @private
|
||
|
* @param {Object} source The object of property values to match.
|
||
|
* @returns {Function} Returns the new function.
|
||
|
*/
|
||
|
function baseMatches(source) {
|
||
|
var props = keys(source),
|
||
|
length = props.length;
|
||
|
|
||
|
if (!length) {
|
||
|
return constant(true);
|
||
|
}
|
||
|
if (length == 1) {
|
||
|
var key = props[0],
|
||
|
value = source[key];
|
||
|
|
||
|
if (isStrictComparable(value)) {
|
||
|
return function(object) {
|
||
|
if (object == null) {
|
||
|
return false;
|
||
|
}
|
||
|
return object[key] === value && (value !== undefined || (key in toObject(object)));
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
var values = Array(length),
|
||
|
strictCompareFlags = Array(length);
|
||
|
|
||
|
while (length--) {
|
||
|
value = source[props[length]];
|
||
|
values[length] = value;
|
||
|
strictCompareFlags[length] = isStrictComparable(value);
|
||
|
}
|
||
|
return function(object) {
|
||
|
return object != null && baseIsMatch(toObject(object), props, values, strictCompareFlags);
|
||
|
};
|
||
|
}
|
||
|
|
||
|
module.exports = baseMatches;
|