mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-12 03:47:50 +00:00
Reduce the number of function creator helpers to improve readabilty.
This commit is contained in:
committed by
John-David Dalton
parent
86b19f742c
commit
10c44b08c9
543
lodash.src.js
543
lodash.src.js
@@ -2475,52 +2475,6 @@
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* The base implementation of `_.merge` without support for argument juggling,
|
|
||||||
* multiple sources, and `this` binding `customizer` functions.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Object} object The destination object.
|
|
||||||
* @param {Object} source The source object.
|
|
||||||
* @param {Function} [customizer] The function to customize merged values.
|
|
||||||
* @param {Array} [stackA=[]] Tracks traversed source objects.
|
|
||||||
* @param {Array} [stackB=[]] Associates values with source counterparts.
|
|
||||||
* @returns {Object} Returns `object`.
|
|
||||||
*/
|
|
||||||
function baseMerge(object, source, customizer, stackA, stackB) {
|
|
||||||
if (!isObject(object)) {
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),
|
|
||||||
props = isSrcArr ? undefined : keys(source);
|
|
||||||
|
|
||||||
arrayEach(props || source, function(srcValue, key) {
|
|
||||||
if (props) {
|
|
||||||
key = srcValue;
|
|
||||||
srcValue = source[key];
|
|
||||||
}
|
|
||||||
if (isObjectLike(srcValue)) {
|
|
||||||
stackA || (stackA = []);
|
|
||||||
stackB || (stackB = []);
|
|
||||||
baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
var value = object[key],
|
|
||||||
result = customizer ? customizer(value, srcValue, key, object, source) : undefined,
|
|
||||||
isCommon = result === undefined;
|
|
||||||
|
|
||||||
if (isCommon) {
|
|
||||||
result = srcValue;
|
|
||||||
}
|
|
||||||
if ((result !== undefined || (isSrcArr && !(key in object))) &&
|
|
||||||
(isCommon || (result === result ? (result !== value) : (value === value)))) {
|
|
||||||
object[key] = result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A specialized version of `baseMerge` for arrays and objects which performs
|
* A specialized version of `baseMerge` for arrays and objects which performs
|
||||||
* deep merges and tracks traversed objects enabling objects with circular
|
* deep merges and tracks traversed objects enabling objects with circular
|
||||||
@@ -3097,7 +3051,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a `_.assign`, `_.defaults`, or `_.merge` function.
|
* Creates a `_.assign` or `_.merge` function.
|
||||||
*
|
*
|
||||||
* @private
|
* @private
|
||||||
* @param {Function} assigner The function to assign values.
|
* @param {Function} assigner The function to assign values.
|
||||||
@@ -3206,8 +3160,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a function that produces compound words out of the words in a
|
* Creates a `_.camelCase`, `_.kebabCase`, `_.snakeCase`, or `_.startCase` function.
|
||||||
* given string.
|
|
||||||
*
|
*
|
||||||
* @private
|
* @private
|
||||||
* @param {Function} callback The function to combine each word.
|
* @param {Function} callback The function to combine each word.
|
||||||
@@ -3260,57 +3213,6 @@
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a `_.curry` or `_.curryRight` function.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {boolean} flag The curry bit flag.
|
|
||||||
* @returns {Function} Returns the new curry function.
|
|
||||||
*/
|
|
||||||
function createCurry(flag) {
|
|
||||||
function curryFunc(func, arity, guard) {
|
|
||||||
if (guard && isIterateeCall(func, arity, guard)) {
|
|
||||||
arity = undefined;
|
|
||||||
}
|
|
||||||
var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity);
|
|
||||||
result.placeholder = curryFunc.placeholder;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
return curryFunc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a `_.defaults` or `_.defaultsDeep` function.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Function} assigner The function to assign values.
|
|
||||||
* @param {Function} customizer The function to customize assigned values.
|
|
||||||
* @returns {Function} Returns the new defaults function.
|
|
||||||
*/
|
|
||||||
function createDefaults(assigner, customizer) {
|
|
||||||
return restParam(function(args) {
|
|
||||||
var object = args[0];
|
|
||||||
if (object == null) {
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
args.push(customizer);
|
|
||||||
return assigner.apply(undefined, args);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a `_.max` or `_.min` function.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Function} extremumBy The function used to get the extremum value.
|
|
||||||
* @returns {Function} Returns the new extremum function.
|
|
||||||
*/
|
|
||||||
function createExtremum(extremumBy) {
|
|
||||||
return function(collection) {
|
|
||||||
return extremumBy(collection, identity);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a `_.maxBy` or `_.minBy` function.
|
* Creates a `_.maxBy` or `_.minBy` function.
|
||||||
*
|
*
|
||||||
@@ -3339,56 +3241,6 @@
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a `_.find` or `_.findLast` function.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Function} eachFunc The function to iterate over a collection.
|
|
||||||
* @param {boolean} [fromRight] Specify iterating from right to left.
|
|
||||||
* @returns {Function} Returns the new find function.
|
|
||||||
*/
|
|
||||||
function createFind(eachFunc, fromRight) {
|
|
||||||
return function(collection, predicate) {
|
|
||||||
predicate = getIteratee(predicate);
|
|
||||||
if (isArray(collection)) {
|
|
||||||
var index = baseFindIndex(collection, predicate, fromRight);
|
|
||||||
return index > -1 ? collection[index] : undefined;
|
|
||||||
}
|
|
||||||
return baseFind(collection, predicate, eachFunc);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a `_.findIndex` or `_.findLastIndex` function.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {boolean} [fromRight] Specify iterating from right to left.
|
|
||||||
* @returns {Function} Returns the new find function.
|
|
||||||
*/
|
|
||||||
function createFindIndex(fromRight) {
|
|
||||||
return function(array, predicate) {
|
|
||||||
if (!(array && array.length)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
predicate = getIteratee(predicate);
|
|
||||||
return baseFindIndex(array, predicate, fromRight);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a `_.findKey` or `_.findLastKey` function.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Function} objectFunc The function to iterate over an object.
|
|
||||||
* @returns {Function} Returns the new find function.
|
|
||||||
*/
|
|
||||||
function createFindKey(objectFunc) {
|
|
||||||
return function(object, predicate) {
|
|
||||||
predicate = getIteratee(predicate);
|
|
||||||
return baseFind(object, predicate, objectFunc, true);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a `_.flow` or `_.flowRight` function.
|
* Creates a `_.flow` or `_.flowRight` function.
|
||||||
*
|
*
|
||||||
@@ -3444,116 +3296,6 @@
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a function for `_.forEach` or `_.forEachRight`.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Function} arrayFunc The function to iterate over an array.
|
|
||||||
* @param {Function} eachFunc The function to iterate over a collection.
|
|
||||||
* @returns {Function} Returns the new each function.
|
|
||||||
*/
|
|
||||||
function createForEach(arrayFunc, eachFunc) {
|
|
||||||
return function(collection, iteratee) {
|
|
||||||
return (typeof iteratee == 'function' && isArray(collection))
|
|
||||||
? arrayFunc(collection, iteratee)
|
|
||||||
: eachFunc(collection, toFunction(iteratee));
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a function for `_.forIn` or `_.forInRight`.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Function} objectFunc The function to iterate over an object.
|
|
||||||
* @returns {Function} Returns the new each function.
|
|
||||||
*/
|
|
||||||
function createForIn(objectFunc) {
|
|
||||||
return function(object, iteratee) {
|
|
||||||
return objectFunc(object, toFunction(iteratee), keysIn);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a function for `_.forOwn` or `_.forOwnRight`.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Function} objectFunc The function to iterate over an object.
|
|
||||||
* @returns {Function} Returns the new each function.
|
|
||||||
*/
|
|
||||||
function createForOwn(objectFunc) {
|
|
||||||
return function(object, iteratee) {
|
|
||||||
return objectFunc(object, toFunction(iteratee));
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a function for `_.mapKeys` or `_.mapValues`.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {boolean} [isMapKeys] Specify mapping keys instead of values.
|
|
||||||
* @returns {Function} Returns the new map function.
|
|
||||||
*/
|
|
||||||
function createObjectMapper(isMapKeys) {
|
|
||||||
return function(object, iteratee) {
|
|
||||||
var result = {};
|
|
||||||
iteratee = getIteratee(iteratee);
|
|
||||||
|
|
||||||
baseForOwn(object, function(value, key, object) {
|
|
||||||
var mapped = iteratee(value, key, object);
|
|
||||||
key = isMapKeys ? mapped : key;
|
|
||||||
value = isMapKeys ? value : mapped;
|
|
||||||
result[key] = value;
|
|
||||||
});
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a function for `_.padLeft` or `_.padRight`.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {boolean} [fromRight] Specify padding from the right.
|
|
||||||
* @returns {Function} Returns the new pad function.
|
|
||||||
*/
|
|
||||||
function createPadDir(fromRight) {
|
|
||||||
return function(string, length, chars) {
|
|
||||||
string = baseToString(string);
|
|
||||||
return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a `_.partial` or `_.partialRight` function.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {boolean} flag The partial bit flag.
|
|
||||||
* @returns {Function} Returns the new partial function.
|
|
||||||
*/
|
|
||||||
function createPartial(flag) {
|
|
||||||
var partialFunc = restParam(function(func, partials) {
|
|
||||||
var holders = replaceHolders(partials, partialFunc.placeholder);
|
|
||||||
return createWrapper(func, flag, undefined, partials, holders);
|
|
||||||
});
|
|
||||||
return partialFunc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a function for `_.reduce` or `_.reduceRight`.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Function} arrayFunc The function to iterate over an array.
|
|
||||||
* @param {Function} eachFunc The function to iterate over a collection.
|
|
||||||
* @returns {Function} Returns the new each function.
|
|
||||||
*/
|
|
||||||
function createReduce(arrayFunc, eachFunc) {
|
|
||||||
return function(collection, iteratee, accumulator) {
|
|
||||||
var initFromArray = arguments.length < 3;
|
|
||||||
return (typeof iteratee == 'function' && isArray(collection))
|
|
||||||
? arrayFunc(collection, iteratee, accumulator, initFromArray)
|
|
||||||
: baseReduce(collection, getIteratee(iteratee), accumulator, initFromArray, eachFunc);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a function that wraps `func` and invokes it with optional `this`
|
* Creates a function that wraps `func` and invokes it with optional `this`
|
||||||
* binding of, partial application, and currying.
|
* binding of, partial application, and currying.
|
||||||
@@ -3720,22 +3462,6 @@
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a `_.sortedIndex` or `_.sortedLastIndex` function.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {boolean} [retHighest] Specify returning the highest qualified index.
|
|
||||||
* @returns {Function} Returns the new index function.
|
|
||||||
*/
|
|
||||||
function createSortedIndex(retHighest) {
|
|
||||||
return function(array, value, iteratee) {
|
|
||||||
var toIteratee = getIteratee();
|
|
||||||
return (iteratee == null && toIteratee === baseIteratee)
|
|
||||||
? binaryIndex(array, value, retHighest)
|
|
||||||
: binaryIndexBy(array, value, toIteratee(iteratee), retHighest);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a function that either curries or invokes `func` with optional
|
* Creates a function that either curries or invokes `func` with optional
|
||||||
* `this` binding and partially applied arguments.
|
* `this` binding and partially applied arguments.
|
||||||
@@ -4899,7 +4625,11 @@
|
|||||||
* _.findIndex(users, 'active');
|
* _.findIndex(users, 'active');
|
||||||
* // => 2
|
* // => 2
|
||||||
*/
|
*/
|
||||||
var findIndex = createFindIndex();
|
function findIndex(array, predicate) {
|
||||||
|
return (array && array.length)
|
||||||
|
? baseFindIndex(array, getIteratee(predicate))
|
||||||
|
: -1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `_.findIndex` except that it iterates over elements
|
* This method is like `_.findIndex` except that it iterates over elements
|
||||||
@@ -4934,7 +4664,11 @@
|
|||||||
* _.findLastIndex(users, 'active');
|
* _.findLastIndex(users, 'active');
|
||||||
* // => 0
|
* // => 0
|
||||||
*/
|
*/
|
||||||
var findLastIndex = createFindIndex(true);
|
function findLastIndex(array, predicate) {
|
||||||
|
return (array && array.length)
|
||||||
|
? baseFindIndex(array, getIteratee(predicate), true)
|
||||||
|
: -1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the first element of `array`.
|
* Gets the first element of `array`.
|
||||||
@@ -5386,7 +5120,12 @@
|
|||||||
* _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
|
* _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
|
||||||
* // => 1
|
* // => 1
|
||||||
*/
|
*/
|
||||||
var sortedIndex = createSortedIndex();
|
function sortedIndex(array, value, iteratee) {
|
||||||
|
var toIteratee = getIteratee();
|
||||||
|
return (iteratee == null && toIteratee === baseIteratee)
|
||||||
|
? binaryIndex(array, value)
|
||||||
|
: binaryIndexBy(array, value, toIteratee(iteratee));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `_.sortedIndex` except that it returns the highest
|
* This method is like `_.sortedIndex` except that it returns the highest
|
||||||
@@ -5405,7 +5144,12 @@
|
|||||||
* _.sortedLastIndex([4, 4, 5, 5], 5);
|
* _.sortedLastIndex([4, 4, 5, 5], 5);
|
||||||
* // => 4
|
* // => 4
|
||||||
*/
|
*/
|
||||||
var sortedLastIndex = createSortedIndex(true);
|
function sortedLastIndex(array, value, iteratee) {
|
||||||
|
var toIteratee = getIteratee();
|
||||||
|
return (iteratee == null && toIteratee === baseIteratee)
|
||||||
|
? binaryIndex(array, value, true)
|
||||||
|
: binaryIndexBy(array, value, toIteratee(iteratee), true);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a slice of `array` with `n` elements taken from the beginning.
|
* Creates a slice of `array` with `n` elements taken from the beginning.
|
||||||
@@ -6302,7 +6046,14 @@
|
|||||||
* resolve( _.find(users, 'active') );
|
* resolve( _.find(users, 'active') );
|
||||||
* // => 'barney'
|
* // => 'barney'
|
||||||
*/
|
*/
|
||||||
var find = createFind(baseEach);
|
function find(collection, predicate) {
|
||||||
|
predicate = getIteratee(predicate);
|
||||||
|
if (isArray(collection)) {
|
||||||
|
var index = baseFindIndex(collection, predicate);
|
||||||
|
return index > -1 ? collection[index] : undefined;
|
||||||
|
}
|
||||||
|
return baseFind(collection, predicate, baseEach);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `_.find` except that it iterates over elements of
|
* This method is like `_.find` except that it iterates over elements of
|
||||||
@@ -6321,7 +6072,14 @@
|
|||||||
* });
|
* });
|
||||||
* // => 3
|
* // => 3
|
||||||
*/
|
*/
|
||||||
var findLast = createFind(baseEachRight, true);
|
function findLast(collection, predicate) {
|
||||||
|
predicate = getIteratee(predicate);
|
||||||
|
if (isArray(collection)) {
|
||||||
|
var index = baseFindIndex(collection, predicate, true);
|
||||||
|
return index > -1 ? collection[index] : undefined;
|
||||||
|
}
|
||||||
|
return baseFind(collection, predicate, baseEachRight);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Iterates over elements of `collection` invoking `iteratee` for each element.
|
* Iterates over elements of `collection` invoking `iteratee` for each element.
|
||||||
@@ -6351,7 +6109,11 @@
|
|||||||
* });
|
* });
|
||||||
* // => logs each value-key pair and returns the object (iteration order is not guaranteed)
|
* // => logs each value-key pair and returns the object (iteration order is not guaranteed)
|
||||||
*/
|
*/
|
||||||
var forEach = createForEach(arrayEach, baseEach);
|
function forEach(collection, iteratee) {
|
||||||
|
return (typeof iteratee == 'function' && isArray(collection))
|
||||||
|
? arrayEach(collection, iteratee)
|
||||||
|
: baseEach(collection, toFunction(iteratee));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `_.forEach` except that it iterates over elements of
|
* This method is like `_.forEach` except that it iterates over elements of
|
||||||
@@ -6371,7 +6133,11 @@
|
|||||||
* });
|
* });
|
||||||
* // => logs each value from right to left and returns the array
|
* // => logs each value from right to left and returns the array
|
||||||
*/
|
*/
|
||||||
var forEachRight = createForEach(arrayEachRight, baseEachRight);
|
function forEachRight(collection, iteratee) {
|
||||||
|
return (typeof iteratee == 'function' && isArray(collection))
|
||||||
|
? arrayEachRight(collection, iteratee)
|
||||||
|
: baseEachRight(collection, toFunction(iteratee));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an object composed of keys generated from the results of running
|
* Creates an object composed of keys generated from the results of running
|
||||||
@@ -6642,7 +6408,12 @@
|
|||||||
* }, {});
|
* }, {});
|
||||||
* // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed)
|
* // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed)
|
||||||
*/
|
*/
|
||||||
var reduce = createReduce(arrayReduce, baseEach);
|
function reduce(collection, iteratee, accumulator) {
|
||||||
|
var initFromArray = arguments.length < 3;
|
||||||
|
return (typeof iteratee == 'function' && isArray(collection))
|
||||||
|
? arrayReduce(collection, iteratee, accumulator, initFromArray)
|
||||||
|
: baseReduce(collection, getIteratee(iteratee), accumulator, initFromArray, baseEach);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `_.reduce` except that it iterates over elements of
|
* This method is like `_.reduce` except that it iterates over elements of
|
||||||
@@ -6665,7 +6436,12 @@
|
|||||||
* }, []);
|
* }, []);
|
||||||
* // => [4, 5, 2, 3, 0, 1]
|
* // => [4, 5, 2, 3, 0, 1]
|
||||||
*/
|
*/
|
||||||
var reduceRight = createReduce(arrayReduceRight, baseEachRight);
|
function reduceRight(collection, iteratee, accumulator) {
|
||||||
|
var initFromArray = arguments.length < 3;
|
||||||
|
return (typeof iteratee == 'function' && isArray(collection))
|
||||||
|
? arrayReduceRight(collection, iteratee, accumulator, initFromArray)
|
||||||
|
: baseReduce(collection, getIteratee(iteratee), accumulator, initFromArray, baseEachRight);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The opposite of `_.filter`; this method returns the elements of `collection`
|
* The opposite of `_.filter`; this method returns the elements of `collection`
|
||||||
@@ -7237,7 +7013,14 @@
|
|||||||
* curried(1)(_, 3)(2);
|
* curried(1)(_, 3)(2);
|
||||||
* // => [1, 2, 3]
|
* // => [1, 2, 3]
|
||||||
*/
|
*/
|
||||||
var curry = createCurry(CURRY_FLAG);
|
function curry(func, arity, guard) {
|
||||||
|
if (guard && isIterateeCall(func, arity, guard)) {
|
||||||
|
arity = undefined;
|
||||||
|
}
|
||||||
|
var result = createWrapper(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
|
||||||
|
result.placeholder = curry.placeholder;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `_.curry` except that arguments are applied to `func`
|
* This method is like `_.curry` except that arguments are applied to `func`
|
||||||
@@ -7276,7 +7059,14 @@
|
|||||||
* curried(3)(1, _)(2);
|
* curried(3)(1, _)(2);
|
||||||
* // => [1, 2, 3]
|
* // => [1, 2, 3]
|
||||||
*/
|
*/
|
||||||
var curryRight = createCurry(CURRY_RIGHT_FLAG);
|
function curryRight(func, arity, guard) {
|
||||||
|
if (guard && isIterateeCall(func, arity, guard)) {
|
||||||
|
arity = undefined;
|
||||||
|
}
|
||||||
|
var result = createWrapper(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
|
||||||
|
result.placeholder = curryRight.placeholder;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a debounced function that delays invoking `func` until after `wait`
|
* Creates a debounced function that delays invoking `func` until after `wait`
|
||||||
@@ -7734,7 +7524,10 @@
|
|||||||
* greetFred('hi');
|
* greetFred('hi');
|
||||||
* // => 'hi fred'
|
* // => 'hi fred'
|
||||||
*/
|
*/
|
||||||
var partial = createPartial(PARTIAL_FLAG);
|
var partial = restParam(function(func, partials) {
|
||||||
|
var holders = replaceHolders(partials, partial.placeholder);
|
||||||
|
return createWrapper(func, PARTIAL_FLAG, undefined, partials, holders);
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `_.partial` except that partially applied arguments
|
* This method is like `_.partial` except that partially applied arguments
|
||||||
@@ -7767,7 +7560,10 @@
|
|||||||
* sayHelloTo('fred');
|
* sayHelloTo('fred');
|
||||||
* // => 'hello fred'
|
* // => 'hello fred'
|
||||||
*/
|
*/
|
||||||
var partialRight = createPartial(PARTIAL_RIGHT_FLAG);
|
var partialRight = restParam(function(func, partials) {
|
||||||
|
var holders = replaceHolders(partials, partialRight.placeholder);
|
||||||
|
return createWrapper(func, PARTIAL_RIGHT_FLAG, undefined, partials, holders);
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a function that invokes `func` with arguments arranged according
|
* Creates a function that invokes `func` with arguments arranged according
|
||||||
@@ -8862,7 +8658,39 @@
|
|||||||
* });
|
* });
|
||||||
* // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }
|
* // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }
|
||||||
*/
|
*/
|
||||||
var merge = createAssigner(baseMerge);
|
var merge = createAssigner(function baseMerge(object, source, customizer, stackA, stackB) {
|
||||||
|
if (!isObject(object)) {
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),
|
||||||
|
props = isSrcArr ? undefined : keys(source);
|
||||||
|
|
||||||
|
arrayEach(props || source, function(srcValue, key) {
|
||||||
|
if (props) {
|
||||||
|
key = srcValue;
|
||||||
|
srcValue = source[key];
|
||||||
|
}
|
||||||
|
if (isObjectLike(srcValue)) {
|
||||||
|
stackA || (stackA = []);
|
||||||
|
stackB || (stackB = []);
|
||||||
|
baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var value = object[key],
|
||||||
|
result = customizer ? customizer(value, srcValue, key, object, source) : undefined,
|
||||||
|
isCommon = result === undefined;
|
||||||
|
|
||||||
|
if (isCommon) {
|
||||||
|
result = srcValue;
|
||||||
|
}
|
||||||
|
if ((result !== undefined || (isSrcArr && !(key in object))) &&
|
||||||
|
(isCommon || (result === result ? (result !== value) : (value === value)))) {
|
||||||
|
object[key] = result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return object;
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assigns own enumerable properties of source object(s) to the destination
|
* Assigns own enumerable properties of source object(s) to the destination
|
||||||
@@ -8961,7 +8789,14 @@
|
|||||||
* _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
|
* _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
|
||||||
* // => { 'user': 'barney', 'age': 36 }
|
* // => { 'user': 'barney', 'age': 36 }
|
||||||
*/
|
*/
|
||||||
var defaults = createDefaults(assign, assignDefaults);
|
var defaults = restParam(function(args) {
|
||||||
|
var object = args[0];
|
||||||
|
if (object == null) {
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
args.push(assignDefaults);
|
||||||
|
return assign.apply(undefined, args);
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `_.defaults` except that it recursively assigns
|
* This method is like `_.defaults` except that it recursively assigns
|
||||||
@@ -8981,7 +8816,14 @@
|
|||||||
* // => { 'user': { 'name': 'barney', 'age': 36 } }
|
* // => { 'user': { 'name': 'barney', 'age': 36 } }
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
var defaultsDeep = createDefaults(merge, mergeDefaults);
|
var defaultsDeep = restParam(function(args) {
|
||||||
|
var object = args[0];
|
||||||
|
if (object == null) {
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
args.push(mergeDefaults);
|
||||||
|
return merge.apply(undefined, args);
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `_.find` except that it returns the key of the first
|
* This method is like `_.find` except that it returns the key of the first
|
||||||
@@ -9016,7 +8858,10 @@
|
|||||||
* _.findKey(users, 'active');
|
* _.findKey(users, 'active');
|
||||||
* // => 'barney'
|
* // => 'barney'
|
||||||
*/
|
*/
|
||||||
var findKey = createFindKey(baseForOwn);
|
function findKey(object, predicate) {
|
||||||
|
predicate = getIteratee(predicate);
|
||||||
|
return baseFind(object, predicate, baseForOwn, true);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `_.findKey` except that it iterates over elements of
|
* This method is like `_.findKey` except that it iterates over elements of
|
||||||
@@ -9051,7 +8896,10 @@
|
|||||||
* _.findLastKey(users, 'active');
|
* _.findLastKey(users, 'active');
|
||||||
* // => 'pebbles'
|
* // => 'pebbles'
|
||||||
*/
|
*/
|
||||||
var findLastKey = createFindKey(baseForOwnRight);
|
function findLastKey(object, predicate) {
|
||||||
|
predicate = getIteratee(predicate);
|
||||||
|
return baseFind(object, predicate, baseForOwnRight, true);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Iterates over own and inherited enumerable properties of an object invoking
|
* Iterates over own and inherited enumerable properties of an object invoking
|
||||||
@@ -9079,7 +8927,9 @@
|
|||||||
* });
|
* });
|
||||||
* // => logs 'a', 'b', and 'c' (iteration order is not guaranteed)
|
* // => logs 'a', 'b', and 'c' (iteration order is not guaranteed)
|
||||||
*/
|
*/
|
||||||
var forIn = createForIn(baseFor);
|
function forIn(object, iteratee) {
|
||||||
|
return baseFor(object, toFunction(iteratee), keysIn);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `_.forIn` except that it iterates over properties of
|
* This method is like `_.forIn` except that it iterates over properties of
|
||||||
@@ -9105,7 +8955,9 @@
|
|||||||
* });
|
* });
|
||||||
* // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c'
|
* // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c'
|
||||||
*/
|
*/
|
||||||
var forInRight = createForIn(baseForRight);
|
function forInRight(object, iteratee) {
|
||||||
|
return baseForRight(object, toFunction(iteratee), keysIn);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Iterates over own enumerable properties of an object invoking `iteratee`
|
* Iterates over own enumerable properties of an object invoking `iteratee`
|
||||||
@@ -9133,7 +8985,9 @@
|
|||||||
* });
|
* });
|
||||||
* // => logs 'a' and 'b' (iteration order is not guaranteed)
|
* // => logs 'a' and 'b' (iteration order is not guaranteed)
|
||||||
*/
|
*/
|
||||||
var forOwn = createForOwn(baseForOwn);
|
function forOwn(object, iteratee) {
|
||||||
|
return baseForOwn(object, toFunction(iteratee));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `_.forOwn` except that it iterates over properties of
|
* This method is like `_.forOwn` except that it iterates over properties of
|
||||||
@@ -9159,7 +9013,10 @@
|
|||||||
* });
|
* });
|
||||||
* // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b'
|
* // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b'
|
||||||
*/
|
*/
|
||||||
var forOwnRight = createForOwn(baseForOwnRight);
|
function forOwnRight(object, iteratee) {
|
||||||
|
return baseForOwnRight(object, toFunction(iteratee));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an array of function property names from all enumerable properties,
|
* Creates an array of function property names from all enumerable properties,
|
||||||
@@ -9432,7 +9289,15 @@
|
|||||||
* });
|
* });
|
||||||
* // => { 'a1': 1, 'b2': 2 }
|
* // => { 'a1': 1, 'b2': 2 }
|
||||||
*/
|
*/
|
||||||
var mapKeys = createObjectMapper(true);
|
function mapKeys(object, iteratee) {
|
||||||
|
var result = {};
|
||||||
|
iteratee = getIteratee(iteratee);
|
||||||
|
|
||||||
|
baseForOwn(object, function(value, key, object) {
|
||||||
|
result[iteratee(value, key, object)] = value;
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an object with the same keys as `object` and values generated by
|
* Creates an object with the same keys as `object` and values generated by
|
||||||
@@ -9459,7 +9324,15 @@
|
|||||||
* _.mapValues(users, 'age');
|
* _.mapValues(users, 'age');
|
||||||
* // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
|
* // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
|
||||||
*/
|
*/
|
||||||
var mapValues = createObjectMapper();
|
function mapValues(object, iteratee) {
|
||||||
|
var result = {};
|
||||||
|
iteratee = getIteratee(iteratee);
|
||||||
|
|
||||||
|
baseForOwn(object, function(value, key, object) {
|
||||||
|
result[key] = iteratee(value, key, object);
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The opposite of `_.pick`; this method creates an object composed of the
|
* The opposite of `_.pick`; this method creates an object composed of the
|
||||||
@@ -10103,7 +9976,10 @@
|
|||||||
* _.padLeft('abc', 3);
|
* _.padLeft('abc', 3);
|
||||||
* // => 'abc'
|
* // => 'abc'
|
||||||
*/
|
*/
|
||||||
var padLeft = createPadDir();
|
function padLeft(string, length, chars) {
|
||||||
|
string = baseToString(string);
|
||||||
|
return createPadding(string, length, chars) + string;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pads `string` on the right side if it's shorter than `length`. Padding
|
* Pads `string` on the right side if it's shorter than `length`. Padding
|
||||||
@@ -10127,7 +10003,10 @@
|
|||||||
* _.padRight('abc', 3);
|
* _.padRight('abc', 3);
|
||||||
* // => 'abc'
|
* // => 'abc'
|
||||||
*/
|
*/
|
||||||
var padRight = createPadDir(true);
|
function padRight(string, length, chars) {
|
||||||
|
string = baseToString(string);
|
||||||
|
return string + createPadding(string, length, chars);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts `string` to an integer of the specified radix. If `radix` is
|
* Converts `string` to an integer of the specified radix. If `radix` is
|
||||||
@@ -11306,6 +11185,27 @@
|
|||||||
*/
|
*/
|
||||||
var floor = createRound('floor');
|
var floor = createRound('floor');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the maximum value of `collection`. If `collection` is empty or falsey
|
||||||
|
* `-Infinity` is returned.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @memberOf _
|
||||||
|
* @category Math
|
||||||
|
* @param {Array|Object|string} collection The collection to iterate over.
|
||||||
|
* @returns {*} Returns the maximum value.
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* _.max([4, 2, 8, 6]);
|
||||||
|
* // => 8
|
||||||
|
*
|
||||||
|
* _.max([]);
|
||||||
|
* // => -Infinity
|
||||||
|
*/
|
||||||
|
function max(collection) {
|
||||||
|
return maxBy(collection, identity);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `_.max` except that it accepts an iteratee which is
|
* This method is like `_.max` except that it accepts an iteratee which is
|
||||||
* invoked for each value in `collection` to generate the criterion by which
|
* invoked for each value in `collection` to generate the criterion by which
|
||||||
@@ -11335,23 +11235,25 @@
|
|||||||
var maxBy = createExtremumBy(gt, NEGATIVE_INFINITY);
|
var maxBy = createExtremumBy(gt, NEGATIVE_INFINITY);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the maximum value of `collection`. If `collection` is empty or falsey
|
* Gets the minimum value of `collection`. If `collection` is empty or falsey
|
||||||
* `-Infinity` is returned.
|
* `Infinity` is returned.
|
||||||
*
|
*
|
||||||
* @static
|
* @static
|
||||||
* @memberOf _
|
* @memberOf _
|
||||||
* @category Math
|
* @category Math
|
||||||
* @param {Array|Object|string} collection The collection to iterate over.
|
* @param {Array|Object|string} collection The collection to iterate over.
|
||||||
* @returns {*} Returns the maximum value.
|
* @returns {*} Returns the minimum value.
|
||||||
* @example
|
* @example
|
||||||
*
|
*
|
||||||
* _.max([4, 2, 8, 6]);
|
* _.min([4, 2, 8, 6]);
|
||||||
* // => 8
|
* // => 2
|
||||||
*
|
*
|
||||||
* _.max([]);
|
* _.min([]);
|
||||||
* // => -Infinity
|
* // => Infinity
|
||||||
*/
|
*/
|
||||||
var max = createExtremum(maxBy);
|
function min(collection) {
|
||||||
|
return minBy(collection, identity);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `_.min` except that it accepts an iteratee which is
|
* This method is like `_.min` except that it accepts an iteratee which is
|
||||||
@@ -11381,25 +11283,6 @@
|
|||||||
*/
|
*/
|
||||||
var minBy = createExtremumBy(lt, POSITIVE_INFINITY);
|
var minBy = createExtremumBy(lt, POSITIVE_INFINITY);
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the minimum value of `collection`. If `collection` is empty or falsey
|
|
||||||
* `Infinity` is returned.
|
|
||||||
*
|
|
||||||
* @static
|
|
||||||
* @memberOf _
|
|
||||||
* @category Math
|
|
||||||
* @param {Array|Object|string} collection The collection to iterate over.
|
|
||||||
* @returns {*} Returns the minimum value.
|
|
||||||
* @example
|
|
||||||
*
|
|
||||||
* _.min([4, 2, 8, 6]);
|
|
||||||
* // => 2
|
|
||||||
*
|
|
||||||
* _.min([]);
|
|
||||||
* // => Infinity
|
|
||||||
*/
|
|
||||||
var min = createExtremum(minBy);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates `n` rounded to `precision`.
|
* Calculates `n` rounded to `precision`.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user