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
			| 
								 
											3 years ago
										 
									 | 
							
								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;
							 |