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.
		
		
		
		
		
			
		
			
				
					
					
						
							61 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							61 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;
 |