mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-01-31 07:17:50 +00:00
Bump to v3.6.0.
This commit is contained in:
@@ -2,7 +2,7 @@ import createWrapper from '../internal/createWrapper';
|
||||
import isIterateeCall from '../internal/isIterateeCall';
|
||||
|
||||
/** Used to compose bitmasks for wrapper metadata. */
|
||||
var ARY_FLAG = 256;
|
||||
var ARY_FLAG = 128;
|
||||
|
||||
/* Native method references for those with the same name as other `lodash` methods. */
|
||||
var nativeMax = Math.max;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import baseSlice from '../internal/baseSlice';
|
||||
import createWrapper from '../internal/createWrapper';
|
||||
import replaceHolders from '../internal/replaceHolders';
|
||||
import restParam from './restParam';
|
||||
|
||||
/** Used to compose bitmasks for wrapper metadata. */
|
||||
var BIND_FLAG = 1,
|
||||
@@ -22,7 +22,7 @@ var BIND_FLAG = 1,
|
||||
* @category Function
|
||||
* @param {Function} func The function to bind.
|
||||
* @param {*} thisArg The `this` binding of `func`.
|
||||
* @param {...*} [args] The arguments to be partially applied.
|
||||
* @param {...*} [partials] The arguments to be partially applied.
|
||||
* @returns {Function} Returns the new bound function.
|
||||
* @example
|
||||
*
|
||||
@@ -41,16 +41,14 @@ var BIND_FLAG = 1,
|
||||
* bound('hi');
|
||||
* // => 'hi fred!'
|
||||
*/
|
||||
function bind(func, thisArg) {
|
||||
var bind = restParam(function(func, thisArg, partials) {
|
||||
var bitmask = BIND_FLAG;
|
||||
if (arguments.length > 2) {
|
||||
var partials = baseSlice(arguments, 2),
|
||||
holders = replaceHolders(partials, bind.placeholder);
|
||||
|
||||
if (partials.length) {
|
||||
var holders = replaceHolders(partials, bind.placeholder);
|
||||
bitmask |= PARTIAL_FLAG;
|
||||
}
|
||||
return createWrapper(func, bitmask, thisArg, partials, holders);
|
||||
}
|
||||
});
|
||||
|
||||
// Assign default placeholders.
|
||||
bind.placeholder = {};
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
import baseBindAll from '../internal/baseBindAll';
|
||||
import baseFlatten from '../internal/baseFlatten';
|
||||
import createWrapper from '../internal/createWrapper';
|
||||
import functions from '../object/functions';
|
||||
import restParam from './restParam';
|
||||
|
||||
/** Used to compose bitmasks for wrapper metadata. */
|
||||
var BIND_FLAG = 1;
|
||||
|
||||
/**
|
||||
* Binds methods of an object to the object itself, overwriting the existing
|
||||
@@ -30,12 +34,17 @@ import functions from '../object/functions';
|
||||
* jQuery('#docs').on('click', view.onClick);
|
||||
* // => logs 'clicked docs' when the element is clicked
|
||||
*/
|
||||
function bindAll(object) {
|
||||
return baseBindAll(object,
|
||||
arguments.length > 1
|
||||
? baseFlatten(arguments, false, false, 1)
|
||||
: functions(object)
|
||||
);
|
||||
}
|
||||
var bindAll = restParam(function(object, methodNames) {
|
||||
methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object);
|
||||
|
||||
var index = -1,
|
||||
length = methodNames.length;
|
||||
|
||||
while (++index < length) {
|
||||
var key = methodNames[index];
|
||||
object[key] = createWrapper(object[key], BIND_FLAG, object);
|
||||
}
|
||||
return object;
|
||||
});
|
||||
|
||||
export default bindAll;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import baseSlice from '../internal/baseSlice';
|
||||
import createWrapper from '../internal/createWrapper';
|
||||
import replaceHolders from '../internal/replaceHolders';
|
||||
import restParam from './restParam';
|
||||
|
||||
/** Used to compose bitmasks for wrapper metadata. */
|
||||
var BIND_FLAG = 1,
|
||||
@@ -24,7 +24,7 @@ var BIND_FLAG = 1,
|
||||
* @category Function
|
||||
* @param {Object} object The object the method belongs to.
|
||||
* @param {string} key The key of the method.
|
||||
* @param {...*} [args] The arguments to be partially applied.
|
||||
* @param {...*} [partials] The arguments to be partially applied.
|
||||
* @returns {Function} Returns the new bound function.
|
||||
* @example
|
||||
*
|
||||
@@ -51,16 +51,14 @@ var BIND_FLAG = 1,
|
||||
* bound('hi');
|
||||
* // => 'hiya fred!'
|
||||
*/
|
||||
function bindKey(object, key) {
|
||||
var bindKey = restParam(function(object, key, partials) {
|
||||
var bitmask = BIND_FLAG | BIND_KEY_FLAG;
|
||||
if (arguments.length > 2) {
|
||||
var partials = baseSlice(arguments, 2),
|
||||
holders = replaceHolders(partials, bindKey.placeholder);
|
||||
|
||||
if (partials.length) {
|
||||
var holders = replaceHolders(partials, bindKey.placeholder);
|
||||
bitmask |= PARTIAL_FLAG;
|
||||
}
|
||||
return createWrapper(key, bitmask, object, partials, holders);
|
||||
}
|
||||
});
|
||||
|
||||
// Assign default placeholders.
|
||||
bindKey.placeholder = {};
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import createWrapper from '../internal/createWrapper';
|
||||
import isIterateeCall from '../internal/isIterateeCall';
|
||||
import createCurry from '../internal/createCurry';
|
||||
|
||||
/** Used to compose bitmasks for wrapper metadata. */
|
||||
var CURRY_FLAG = 8;
|
||||
@@ -44,14 +43,7 @@ var CURRY_FLAG = 8;
|
||||
* curried(1)(_, 3)(2);
|
||||
* // => [1, 2, 3]
|
||||
*/
|
||||
function curry(func, arity, guard) {
|
||||
if (guard && isIterateeCall(func, arity, guard)) {
|
||||
arity = null;
|
||||
}
|
||||
var result = createWrapper(func, CURRY_FLAG, null, null, null, null, null, arity);
|
||||
result.placeholder = curry.placeholder;
|
||||
return result;
|
||||
}
|
||||
var curry = createCurry(CURRY_FLAG);
|
||||
|
||||
// Assign default placeholders.
|
||||
curry.placeholder = {};
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import createWrapper from '../internal/createWrapper';
|
||||
import isIterateeCall from '../internal/isIterateeCall';
|
||||
import createCurry from '../internal/createCurry';
|
||||
|
||||
/** Used to compose bitmasks for wrapper metadata. */
|
||||
var CURRY_RIGHT_FLAG = 16;
|
||||
@@ -41,14 +40,7 @@ var CURRY_RIGHT_FLAG = 16;
|
||||
* curried(3)(1, _)(2);
|
||||
* // => [1, 2, 3]
|
||||
*/
|
||||
function curryRight(func, arity, guard) {
|
||||
if (guard && isIterateeCall(func, arity, guard)) {
|
||||
arity = null;
|
||||
}
|
||||
var result = createWrapper(func, CURRY_RIGHT_FLAG, null, null, null, null, null, arity);
|
||||
result.placeholder = curryRight.placeholder;
|
||||
return result;
|
||||
}
|
||||
var curryRight = createCurry(CURRY_RIGHT_FLAG);
|
||||
|
||||
// Assign default placeholders.
|
||||
curryRight.placeholder = {};
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import baseDelay from '../internal/baseDelay';
|
||||
import restParam from './restParam';
|
||||
|
||||
/**
|
||||
* Defers invoking the `func` until the current call stack has cleared. Any
|
||||
@@ -17,8 +18,8 @@ import baseDelay from '../internal/baseDelay';
|
||||
* }, 'deferred');
|
||||
* // logs 'deferred' after one or more milliseconds
|
||||
*/
|
||||
function defer(func) {
|
||||
return baseDelay(func, 1, arguments, 1);
|
||||
}
|
||||
var defer = restParam(function(func, args) {
|
||||
return baseDelay(func, 1, args);
|
||||
});
|
||||
|
||||
export default defer;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import baseDelay from '../internal/baseDelay';
|
||||
import restParam from './restParam';
|
||||
|
||||
/**
|
||||
* Invokes `func` after `wait` milliseconds. Any additional arguments are
|
||||
@@ -18,8 +19,8 @@ import baseDelay from '../internal/baseDelay';
|
||||
* }, 1000, 'later');
|
||||
* // => logs 'later' after one second
|
||||
*/
|
||||
function delay(func, wait) {
|
||||
return baseDelay(func, wait, arguments, 2);
|
||||
}
|
||||
var delay = restParam(function(func, wait, args) {
|
||||
return baseDelay(func, wait, args);
|
||||
});
|
||||
|
||||
export default delay;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import createComposer from '../internal/createComposer';
|
||||
import createFlow from '../internal/createFlow';
|
||||
|
||||
/**
|
||||
* Creates a function that returns the result of invoking the provided
|
||||
@@ -20,6 +20,6 @@ import createComposer from '../internal/createComposer';
|
||||
* addSquare(1, 2);
|
||||
* // => 9
|
||||
*/
|
||||
var flow = createComposer();
|
||||
var flow = createFlow();
|
||||
|
||||
export default flow;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import createComposer from '../internal/createComposer';
|
||||
import createFlow from '../internal/createFlow';
|
||||
|
||||
/**
|
||||
* This method is like `_.flow` except that it creates a function that
|
||||
@@ -20,6 +20,6 @@ import createComposer from '../internal/createComposer';
|
||||
* addSquare(1, 2);
|
||||
* // => 9
|
||||
*/
|
||||
var flowRight = createComposer(true);
|
||||
var flowRight = createFlow(true);
|
||||
|
||||
export default flowRight;
|
||||
|
||||
@@ -13,10 +13,8 @@ var FUNC_ERROR_TEXT = 'Expected a function';
|
||||
*
|
||||
* **Note:** The cache is exposed as the `cache` property on the memoized
|
||||
* function. Its creation may be customized by replacing the `_.memoize.Cache`
|
||||
* constructor with one whose instances implement the ES `Map` method interface
|
||||
* of `get`, `has`, and `set`. See the
|
||||
* [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-properties-of-the-map-prototype-object)
|
||||
* for more details.
|
||||
* constructor with one whose instances implement the [`Map`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-properties-of-the-map-prototype-object)
|
||||
* method interface of `get`, `has`, and `set`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
|
||||
@@ -3,7 +3,7 @@ import before from './before';
|
||||
/**
|
||||
* Creates a function that is restricted to invoking `func` once. Repeat calls
|
||||
* to the function return the value of the first call. The `func` is invoked
|
||||
* with the `this` binding of the created function.
|
||||
* with the `this` binding and arguments of the created function.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
import baseSlice from '../internal/baseSlice';
|
||||
import createWrapper from '../internal/createWrapper';
|
||||
import replaceHolders from '../internal/replaceHolders';
|
||||
import createPartial from '../internal/createPartial';
|
||||
|
||||
/** Used to compose bitmasks for wrapper metadata. */
|
||||
var PARTIAL_FLAG = 32;
|
||||
@@ -20,7 +18,7 @@ var PARTIAL_FLAG = 32;
|
||||
* @memberOf _
|
||||
* @category Function
|
||||
* @param {Function} func The function to partially apply arguments to.
|
||||
* @param {...*} [args] The arguments to be partially applied.
|
||||
* @param {...*} [partials] The arguments to be partially applied.
|
||||
* @returns {Function} Returns the new partially applied function.
|
||||
* @example
|
||||
*
|
||||
@@ -37,12 +35,7 @@ var PARTIAL_FLAG = 32;
|
||||
* greetFred('hi');
|
||||
* // => 'hi fred'
|
||||
*/
|
||||
function partial(func) {
|
||||
var partials = baseSlice(arguments, 1),
|
||||
holders = replaceHolders(partials, partial.placeholder);
|
||||
|
||||
return createWrapper(func, PARTIAL_FLAG, null, partials, holders);
|
||||
}
|
||||
var partial = createPartial(PARTIAL_FLAG);
|
||||
|
||||
// Assign default placeholders.
|
||||
partial.placeholder = {};
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
import baseSlice from '../internal/baseSlice';
|
||||
import createWrapper from '../internal/createWrapper';
|
||||
import replaceHolders from '../internal/replaceHolders';
|
||||
import createPartial from '../internal/createPartial';
|
||||
|
||||
/** Used to compose bitmasks for wrapper metadata. */
|
||||
var PARTIAL_RIGHT_FLAG = 64;
|
||||
@@ -19,7 +17,7 @@ var PARTIAL_RIGHT_FLAG = 64;
|
||||
* @memberOf _
|
||||
* @category Function
|
||||
* @param {Function} func The function to partially apply arguments to.
|
||||
* @param {...*} [args] The arguments to be partially applied.
|
||||
* @param {...*} [partials] The arguments to be partially applied.
|
||||
* @returns {Function} Returns the new partially applied function.
|
||||
* @example
|
||||
*
|
||||
@@ -36,12 +34,7 @@ var PARTIAL_RIGHT_FLAG = 64;
|
||||
* sayHelloTo('fred');
|
||||
* // => 'hello fred'
|
||||
*/
|
||||
function partialRight(func) {
|
||||
var partials = baseSlice(arguments, 1),
|
||||
holders = replaceHolders(partials, partialRight.placeholder);
|
||||
|
||||
return createWrapper(func, PARTIAL_RIGHT_FLAG, null, partials, holders);
|
||||
}
|
||||
var partialRight = createPartial(PARTIAL_RIGHT_FLAG);
|
||||
|
||||
// Assign default placeholders.
|
||||
partialRight.placeholder = {};
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import baseFlatten from '../internal/baseFlatten';
|
||||
import createWrapper from '../internal/createWrapper';
|
||||
import restParam from './restParam';
|
||||
|
||||
/** Used to compose bitmasks for wrapper metadata. */
|
||||
var REARG_FLAG = 128;
|
||||
var REARG_FLAG = 256;
|
||||
|
||||
/**
|
||||
* Creates a function that invokes `func` with arguments arranged according
|
||||
@@ -32,9 +33,8 @@ var REARG_FLAG = 128;
|
||||
* }, [1, 2, 3]);
|
||||
* // => [3, 6, 9]
|
||||
*/
|
||||
function rearg(func) {
|
||||
var indexes = baseFlatten(arguments, false, false, 1);
|
||||
return createWrapper(func, REARG_FLAG, null, null, null, indexes);
|
||||
}
|
||||
var rearg = restParam(function(func, indexes) {
|
||||
return createWrapper(func, REARG_FLAG, null, null, null, baseFlatten(indexes));
|
||||
});
|
||||
|
||||
export default rearg;
|
||||
|
||||
58
function/restParam.js
Normal file
58
function/restParam.js
Normal file
@@ -0,0 +1,58 @@
|
||||
/** Used as the `TypeError` message for "Functions" methods. */
|
||||
var FUNC_ERROR_TEXT = 'Expected a function';
|
||||
|
||||
/* Native method references for those with the same name as other `lodash` methods. */
|
||||
var nativeMax = Math.max;
|
||||
|
||||
/**
|
||||
* Creates a function that invokes `func` with the `this` binding of the
|
||||
* created function and arguments from `start` and beyond provided as an array.
|
||||
*
|
||||
* **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Function
|
||||
* @param {Function} func The function to apply a rest parameter to.
|
||||
* @param {number} [start=func.length-1] The start position of the rest parameter.
|
||||
* @returns {Function} Returns the new function.
|
||||
* @example
|
||||
*
|
||||
* var say = _.restParam(function(what, names) {
|
||||
* return what + ' ' + _.initial(names).join(', ') +
|
||||
* (_.size(names) > 1 ? ', & ' : '') + _.last(names);
|
||||
* });
|
||||
*
|
||||
* say('hello', 'fred', 'barney', 'pebbles');
|
||||
* // => 'hello fred, barney, & pebbles'
|
||||
*/
|
||||
function restParam(func, start) {
|
||||
if (typeof func != 'function') {
|
||||
throw new TypeError(FUNC_ERROR_TEXT);
|
||||
}
|
||||
start = nativeMax(typeof start == 'undefined' ? (func.length - 1) : (+start || 0), 0);
|
||||
return function() {
|
||||
var args = arguments,
|
||||
index = -1,
|
||||
length = nativeMax(args.length - start, 0),
|
||||
rest = Array(length);
|
||||
|
||||
while (++index < length) {
|
||||
rest[index] = args[start + index];
|
||||
}
|
||||
switch (start) {
|
||||
case 0: return func.call(this, rest);
|
||||
case 1: return func.call(this, args[0], rest);
|
||||
case 2: return func.call(this, args[0], args[1], rest);
|
||||
}
|
||||
var otherArgs = Array(start + 1);
|
||||
index = -1;
|
||||
while (++index < start) {
|
||||
otherArgs[index] = args[index];
|
||||
}
|
||||
otherArgs[start] = rest;
|
||||
return func.apply(this, otherArgs);
|
||||
};
|
||||
}
|
||||
|
||||
export default restParam;
|
||||
@@ -2,23 +2,24 @@
|
||||
var FUNC_ERROR_TEXT = 'Expected a function';
|
||||
|
||||
/**
|
||||
* Creates a function that invokes `func` with the `this` binding of the
|
||||
* created function and the array of arguments provided to the created
|
||||
* function much like [Function#apply](http://es5.github.io/#x15.3.4.3).
|
||||
* Creates a function that invokes `func` with the `this` binding of the created
|
||||
* function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3).
|
||||
*
|
||||
* **Note:** This method is based on the [spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator).
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Function
|
||||
* @param {Function} func The function to spread arguments over.
|
||||
* @returns {*} Returns the new function.
|
||||
* @returns {Function} Returns the new function.
|
||||
* @example
|
||||
*
|
||||
* var spread = _.spread(function(who, what) {
|
||||
* var say = _.spread(function(who, what) {
|
||||
* return who + ' says ' + what;
|
||||
* });
|
||||
*
|
||||
* spread(['Fred', 'hello']);
|
||||
* // => 'Fred says hello'
|
||||
* say(['fred', 'hello']);
|
||||
* // => 'fred says hello'
|
||||
*
|
||||
* // with a Promise
|
||||
* var numbers = Promise.all([
|
||||
|
||||
Reference in New Issue
Block a user