|  | 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; |