_.conformsTo(object, source)
122
_.conformsTo(object, source)
_.conformsTo检查object对象是否和source对象一致,通过调用source的predicate属性传递object对象对应的参数给它
参数
object (Object): 需要检查的对象
source (Object): 检查方法predicate组成的对象
返回值
(boolean): 如果检查通过返回true,否则false
例子
var object = { 'a': 1, 'b': 2 }; _.conformsTo(object, { 'b': function(n) { return n > 1; } }); // => true _.conformsTo(object, { 'b': function(n) { return n > 2; } }); // => false
源代码
import baseConformsTo from './.internal/baseConformsTo.js' import keys from './keys.js' /** * Checks if `object` conforms to `source` by invoking the predicate * properties of `source` with the corresponding property values of `object`. * * **Note:** This method is equivalent to `conforms` when `source` is * partially applied. * * @since 4.14.0 * @category Lang * @param {Object} object The object to inspect. * @param {Object} source The object of property predicates to conform to. * @returns {boolean} Returns `true` if `object` conforms, else `false`. * @example * * const object = { 'a': 1, 'b': 2 } * * conformsTo(object, { 'b': function(n) { return n > 1 } }) * // => true * * conformsTo(object, { 'b': function(n) { return n > 2 } }) * // => false */ //检查object对象是否和source对象一致,通过调用source的predicate属性传递object对象对应的参数给它 function conformsTo(object, source) { return source == null || baseConformsTo(object, source, keys(source)) //如果用来判断的source对象不是null,就调用baseConformsTo来处理,第三个参数是source对象的自身可枚举属性组成的数组 } export default conformsTo
baseConformsTo
/** * The base implementation of `conformsTo` which accepts `props` to check. * * @private * @param {Object} object The object to inspect. * @param {Object} source The object of property predicates to conform to. * @returns {boolean} Returns `true` if `object` conforms, else `false`. */ //conformsTo的基础实现,接收props参数来检查 //第三个参数props是source对象的自身可枚举属性组成的数组 function baseConformsTo(object, source, props) { let length = props.length//props的长度 if (object == null) {//如果object为null,如果规则predicate函数的长度为0,则返回true,否则返回false return !length } object = Object(object) while (length--) {//循环规则predicate函数的个数 const key = props[length]//当前predicate的键 const predicate = source[key]//当前predicate函数 const value = object[key]//需要判断的值 if ((value === undefined && !(key in object)) || !predicate(value)) { //如果object不存在对应键,不存在键对应值,或者object上键对应值传递给predicate函数后返回了false //那么就返回false return false } } return true//否则返回true } export default baseConformsTo