_.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

 

posted @ 2018-12-17 18:40  hahazexia  阅读(377)  评论(0)    收藏  举报