You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							60 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							60 lines
						
					
					
						
							1.6 KiB
						
					
					
				var apply = require('./_apply'), | 
						|
    arrayMap = require('./_arrayMap'), | 
						|
    baseIteratee = require('./_baseIteratee'), | 
						|
    baseRest = require('./_baseRest'); | 
						|
 | 
						|
/** Error message constants. */ | 
						|
var FUNC_ERROR_TEXT = 'Expected a function'; | 
						|
 | 
						|
/** | 
						|
 * Creates a function that iterates over `pairs` and invokes the corresponding | 
						|
 * function of the first predicate to return truthy. The predicate-function | 
						|
 * pairs are invoked with the `this` binding and arguments of the created | 
						|
 * function. | 
						|
 * | 
						|
 * @static | 
						|
 * @memberOf _ | 
						|
 * @since 4.0.0 | 
						|
 * @category Util | 
						|
 * @param {Array} pairs The predicate-function pairs. | 
						|
 * @returns {Function} Returns the new composite function. | 
						|
 * @example | 
						|
 * | 
						|
 * var func = _.cond([ | 
						|
 *   [_.matches({ 'a': 1 }),           _.constant('matches A')], | 
						|
 *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], | 
						|
 *   [_.stubTrue,                      _.constant('no match')] | 
						|
 * ]); | 
						|
 * | 
						|
 * func({ 'a': 1, 'b': 2 }); | 
						|
 * // => 'matches A' | 
						|
 * | 
						|
 * func({ 'a': 0, 'b': 1 }); | 
						|
 * // => 'matches B' | 
						|
 * | 
						|
 * func({ 'a': '1', 'b': '2' }); | 
						|
 * // => 'no match' | 
						|
 */ | 
						|
function cond(pairs) { | 
						|
  var length = pairs == null ? 0 : pairs.length, | 
						|
      toIteratee = baseIteratee; | 
						|
 | 
						|
  pairs = !length ? [] : arrayMap(pairs, function(pair) { | 
						|
    if (typeof pair[1] != 'function') { | 
						|
      throw new TypeError(FUNC_ERROR_TEXT); | 
						|
    } | 
						|
    return [toIteratee(pair[0]), pair[1]]; | 
						|
  }); | 
						|
 | 
						|
  return baseRest(function(args) { | 
						|
    var index = -1; | 
						|
    while (++index < length) { | 
						|
      var pair = pairs[index]; | 
						|
      if (apply(pair[0], this, args)) { | 
						|
        return apply(pair[1], this, args); | 
						|
      } | 
						|
    } | 
						|
  }); | 
						|
} | 
						|
 | 
						|
module.exports = cond;
 | 
						|
 |