41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | /** Error message constants. */ | ||
|  | var FUNC_ERROR_TEXT = 'Expected a function'; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Creates a function that negates the result of the predicate `func`. The | ||
|  |  * `func` predicate is invoked with the `this` binding and arguments of the | ||
|  |  * created function. | ||
|  |  * | ||
|  |  * @static | ||
|  |  * @memberOf _ | ||
|  |  * @since 3.0.0 | ||
|  |  * @category Function | ||
|  |  * @param {Function} predicate The predicate to negate. | ||
|  |  * @returns {Function} Returns the new negated function. | ||
|  |  * @example | ||
|  |  * | ||
|  |  * function isEven(n) { | ||
|  |  *   return n % 2 == 0; | ||
|  |  * } | ||
|  |  * | ||
|  |  * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); | ||
|  |  * // => [1, 3, 5]
 | ||
|  |  */ | ||
|  | function negate(predicate) { | ||
|  |   if (typeof predicate != 'function') { | ||
|  |     throw new TypeError(FUNC_ERROR_TEXT); | ||
|  |   } | ||
|  |   return function() { | ||
|  |     var args = arguments; | ||
|  |     switch (args.length) { | ||
|  |       case 0: return !predicate.call(this); | ||
|  |       case 1: return !predicate.call(this, args[0]); | ||
|  |       case 2: return !predicate.call(this, args[0], args[1]); | ||
|  |       case 3: return !predicate.call(this, args[0], args[1], args[2]); | ||
|  |     } | ||
|  |     return !predicate.apply(this, args); | ||
|  |   }; | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = negate; |