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