mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-01-29 14:37:49 +00:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0646bacd86 | ||
|
|
4ef16c96e5 | ||
|
|
b97a9a3da0 | ||
|
|
10d5566cf2 | ||
|
|
314048b069 | ||
|
|
b6f9660ab0 | ||
|
|
f84f83a4a5 | ||
|
|
53c14e5b9b | ||
|
|
863bb301bb | ||
|
|
d58549ce0b | ||
|
|
06f6ffa303 |
@@ -1,5 +1,5 @@
|
||||
Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
|
||||
Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
|
||||
Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>
|
||||
Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
|
||||
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
82
README.md
82
README.md
@@ -1,11 +1,11 @@
|
||||
# lodash v3.4.0
|
||||
# lodash v4.0.0
|
||||
|
||||
The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash](https://lodash.com/) exported as [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) modules.
|
||||
The [lodash](https://lodash.com/) library exported as [Node.js](https://nodejs.org/) modules.
|
||||
|
||||
Generated using [lodash-cli](https://www.npmjs.com/package/lodash-cli):
|
||||
```bash
|
||||
$ lodash modularize modern exports=node -o ./
|
||||
$ lodash modern -d -o ./index.js
|
||||
$ lodash modularize exports=node -o ./
|
||||
$ lodash -d -o ./lodash.js
|
||||
```
|
||||
|
||||
## Installation
|
||||
@@ -17,7 +17,7 @@ $ {sudo -H} npm i -g npm
|
||||
$ npm i --save lodash
|
||||
```
|
||||
|
||||
In Node.js/io.js:
|
||||
In Node.js:
|
||||
|
||||
```js
|
||||
// load the modern build
|
||||
@@ -25,10 +25,10 @@ var _ = require('lodash');
|
||||
// or a method category
|
||||
var array = require('lodash/array');
|
||||
// or a method (great for smaller builds with browserify/webpack)
|
||||
var chunk = require('lodash/array/chunk');
|
||||
var chunk = require('lodash/chunk');
|
||||
```
|
||||
|
||||
See the [package source](https://github.com/lodash/lodash/tree/3.4.0-npm) for more details.
|
||||
See the [package source](https://github.com/lodash/lodash/tree/4.0.0-npm) for more details.
|
||||
|
||||
**Note:**<br>
|
||||
Don’t assign values to the [special variable](http://nodejs.org/api/repl.html#repl_repl_features) `_` when in the REPL.<br>
|
||||
@@ -38,79 +38,19 @@ Install [n_](https://www.npmjs.com/package/n_) for a REPL that includes lodash b
|
||||
|
||||
lodash is also available in a variety of other builds & module formats.
|
||||
|
||||
* npm packages for [modern](https://www.npmjs.com/package/lodash), [compatibility](https://www.npmjs.com/package/lodash-compat), & [per method](https://www.npmjs.com/browse/keyword/lodash-modularized) builds
|
||||
* AMD modules for [modern](https://github.com/lodash/lodash/tree/3.4.0-amd) & [compatibility](https://github.com/lodash/lodash-compat/tree/3.4.0-amd) builds
|
||||
* ES modules for the [modern](https://github.com/lodash/lodash/tree/3.4.0-es) build
|
||||
* [lodash](https://www.npmjs.com/package/lodash) & [per method](https://www.npmjs.com/browse/keyword/lodash-modularized) packages
|
||||
* [lodash-amd](https://www.npmjs.com/package/lodash-amd)
|
||||
* [lodash-es](https://www.npmjs.com/package/lodash-es)
|
||||
|
||||
## Further Reading
|
||||
|
||||
* [API Documentation](https://lodash.com/docs)
|
||||
* [Build Differences](https://github.com/lodash/lodash/wiki/Build-Differences)
|
||||
* [Changelog](https://github.com/lodash/lodash/wiki/Changelog)
|
||||
* [Release Notes](https://github.com/lodash/lodash/releases)
|
||||
* [Roadmap](https://github.com/lodash/lodash/wiki/Roadmap)
|
||||
* [More Resources](https://github.com/lodash/lodash/wiki/Resources)
|
||||
|
||||
## Features *not* in Underscore
|
||||
|
||||
* ~100% [code coverage](https://coveralls.io/r/lodash)
|
||||
* Follows [semantic versioning](http://semver.org/) for releases
|
||||
* [Lazily evaluated](http://filimanjaro.com/blog/2014/introducing-lazy-evaluation/) chaining
|
||||
* [_(…)](https://lodash.com/docs#_) supports intuitive chaining
|
||||
* [_.add](https://lodash.com/docs#add) for mathematical composition
|
||||
* [_.ary](https://lodash.com/docs#ary) & [_.rearg](https://lodash.com/docs#rearg) to change function argument limits & order
|
||||
* [_.at](https://lodash.com/docs#at) for cherry-picking collection values
|
||||
* [_.attempt](https://lodash.com/docs#attempt) to execute functions which may error without a try-catch
|
||||
* [_.before](https://lodash.com/docs#before) to complement [_.after](https://lodash.com/docs#after)
|
||||
* [_.bindKey](https://lodash.com/docs#bindKey) for binding [*“lazy”*](http://michaux.ca/articles/lazy-function-definition-pattern) defined methods
|
||||
* [_.chunk](https://lodash.com/docs#chunk) for splitting an array into chunks of a given size
|
||||
* [_.clone](https://lodash.com/docs#clone) supports shallow cloning of `Date` & `RegExp` objects
|
||||
* [_.cloneDeep](https://lodash.com/docs#cloneDeep) for deep cloning arrays & objects
|
||||
* [_.create](https://lodash.com/docs#create) for easier object inheritance
|
||||
* [_.curry](https://lodash.com/docs#curry) & [_.curryRight](https://lodash.com/docs#curryRight) for creating [curried](http://hughfdjackson.com/javascript/why-curry-helps/) functions
|
||||
* [_.debounce](https://lodash.com/docs#debounce) & [_.throttle](https://lodash.com/docs#throttle) are cancelable & accept options for more control
|
||||
* [_.fill](https://lodash.com/docs#fill) to fill arrays with values
|
||||
* [_.findKey](https://lodash.com/docs#findKey) for finding keys
|
||||
* [_.flow](https://lodash.com/docs#flow) to complement [_.flowRight](https://lodash.com/docs#flowRight) (a.k.a `_.compose`)
|
||||
* [_.forEach](https://lodash.com/docs#forEach) supports exiting early
|
||||
* [_.forIn](https://lodash.com/docs#forIn) for iterating all enumerable properties
|
||||
* [_.forOwn](https://lodash.com/docs#forOwn) for iterating own properties
|
||||
* [_.inRange](https://lodash.com/docs#inRange) for checking whether a number is within a given range
|
||||
* [_.isNative](https://lodash.com/docs#isNative) to check for native functions
|
||||
* [_.isPlainObject](https://lodash.com/docs#isPlainObject) & [_.toPlainObject](https://lodash.com/docs#toPlainObject) to check for & convert to `Object` objects
|
||||
* [_.isTypedArray](https://lodash.com/docs#isTypedArray) to check for typed arrays
|
||||
* [_.matches](https://lodash.com/docs#matches) supports deep object comparisons
|
||||
* [_.matchesProperty](https://lodash.com/docs#matchesProperty) to complement [_.matches](https://lodash.com/docs#matches) & [_.property](https://lodash.com/docs#property)
|
||||
* [_.merge](https://lodash.com/docs#merge) for a deep [_.extend](https://lodash.com/docs#extend)
|
||||
* [_.parseInt](https://lodash.com/docs#parseInt) for consistent cross-environment behavior
|
||||
* [_.pull](https://lodash.com/docs#pull), [_.pullAt](https://lodash.com/docs#pullAt), & [_.remove](https://lodash.com/docs#remove) for mutating arrays
|
||||
* [_.random](https://lodash.com/docs#random) supports returning floating-point numbers
|
||||
* [_.runInContext](https://lodash.com/docs#runInContext) for collisionless mixins & easier mocking
|
||||
* [_.slice](https://lodash.com/docs#slice) for creating subsets of array-like values
|
||||
* [_.sortByAll](https://lodash.com/docs#sortByAll) & [_.sortByOrder](https://lodash.com/docs#sortByOrder) for sorting by multiple properties & orders
|
||||
* [_.spread](https://lodash.com/docs#spread) for creating a function to spread an array of arguments to another
|
||||
* [_.sum](https://lodash.com/docs#sum) to get the sum of values
|
||||
* [_.support](https://lodash.com/docs#support) for flagging environment features
|
||||
* [_.template](https://lodash.com/docs#template) supports [*“imports”*](https://lodash.com/docs#templateSettings-imports) options & [ES template delimiters](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-template-literal-lexical-components)
|
||||
* [_.transform](https://lodash.com/docs#transform) as a powerful alternative to [_.reduce](https://lodash.com/docs#reduce) for transforming objects
|
||||
* [_.xor](https://lodash.com/docs#xor) to complement [_.difference](https://lodash.com/docs#difference), [_.intersection](https://lodash.com/docs#intersection), & [_.union](https://lodash.com/docs#union)
|
||||
* [_.valuesIn](https://lodash.com/docs#valuesIn) for getting values of all enumerable properties
|
||||
* [_.bind](https://lodash.com/docs#bind), [_.curry](https://lodash.com/docs#curry), [_.partial](https://lodash.com/docs#partial), &
|
||||
[more](https://lodash.com/docs "_.bindKey, _.curryRight, _.partialRight") support customizable argument placeholders
|
||||
* [_.capitalize](https://lodash.com/docs#capitalize), [_.trim](https://lodash.com/docs#trim), &
|
||||
[more](https://lodash.com/docs "_.camelCase, _.deburr, _.endsWith, _.escapeRegExp, _.kebabCase, _.pad, _.padLeft, _.padRight, _.repeat, _.snakeCase, _.startCase, _.startsWith, _.trimLeft, _.trimRight, _.trunc, _.words") string methods
|
||||
* [_.clone](https://lodash.com/docs#clone), [_.isEqual](https://lodash.com/docs#isEqual), &
|
||||
[more](https://lodash.com/docs "_.assign, _.cloneDeep, _.merge") accept callbacks
|
||||
* [_.dropWhile](https://lodash.com/docs#dropWhile), [_.takeWhile](https://lodash.com/docs#takeWhile), &
|
||||
[more](https://lodash.com/docs "_.drop, _.dropRightWhile, _.take, _.takeRightWhile") to complement [_.first](https://lodash.com/docs#first), [_.initial](https://lodash.com/docs#initial), [_.last](https://lodash.com/docs#last), & [_.rest](https://lodash.com/docs#rest)
|
||||
* [_.findLast](https://lodash.com/docs#findLast), [_.findLastKey](https://lodash.com/docs#findLastKey), &
|
||||
[more](https://lodash.com/docs "_.flowRight, _.forEachRight, _.forInRight, _.forOwnRight, _.partialRight") right-associative methods
|
||||
* [_.includes](https://lodash.com/docs#includes), [_.toArray](https://lodash.com/docs#toArray), &
|
||||
[more](https://lodash.com/docs "_.at, _.countBy, _.every, _.filter, _.find, _.findLast, _.forEach, _.forEachRight, _.groupBy, _.indexBy, _.invoke, _.map, _.max, _.min, _.partition, _.pluck, _.reduce, _.reduceRight, _.reject, _.shuffle, _.size, _.some, _.sortBy") accept strings
|
||||
* [_#commit](https://lodash.com/docs#prototype-commit) & [_#plant](https://lodash.com/docs#prototype-plant) for working with chain sequences
|
||||
* [_#thru](https://lodash.com/docs#thru) to pass values thru a chain sequence
|
||||
|
||||
## Support
|
||||
|
||||
Tested in Chrome 40-41, Firefox 35-36, IE 6-11, Opera 26-27, Safari 5-8, io.js 1.4.3, Node.js 0.8.28, 0.10.36, & 0.12.0, PhantomJS 1.9.8, RingoJS 0.11, & Rhino 1.7RC5.
|
||||
Tested in Chrome 46-47, Firefox 42-43, IE 9-11, Edge 13, Safari 8-9, Node.js 0.10.x, 0.12.x, 4.x, & 5.x, & PhantomJS 1.9.8.
|
||||
Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available. Special thanks to [Sauce Labs](https://saucelabs.com/) for providing automated browser testing.
|
||||
|
||||
26
add.js
Normal file
26
add.js
Normal file
@@ -0,0 +1,26 @@
|
||||
/**
|
||||
* Adds two numbers.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Math
|
||||
* @param {number} augend The first number in an addition.
|
||||
* @param {number} addend The second number in an addition.
|
||||
* @returns {number} Returns the total.
|
||||
* @example
|
||||
*
|
||||
* _.add(6, 4);
|
||||
* // => 10
|
||||
*/
|
||||
function add(augend, addend) {
|
||||
var result;
|
||||
if (augend !== undefined) {
|
||||
result = augend;
|
||||
}
|
||||
if (addend !== undefined) {
|
||||
result = result === undefined ? addend : (result + addend);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = add;
|
||||
@@ -1,12 +1,11 @@
|
||||
var toInteger = require('./toInteger');
|
||||
|
||||
/** 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 nativeIsFinite = global.isFinite;
|
||||
|
||||
/**
|
||||
* The opposite of `_.before`; this method creates a function that invokes
|
||||
* `func` once it is called `n` or more times.
|
||||
* `func` once it's called `n` or more times.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
@@ -29,15 +28,9 @@ var nativeIsFinite = global.isFinite;
|
||||
*/
|
||||
function after(n, func) {
|
||||
if (typeof func != 'function') {
|
||||
if (typeof n == 'function') {
|
||||
var temp = n;
|
||||
n = func;
|
||||
func = temp;
|
||||
} else {
|
||||
throw new TypeError(FUNC_ERROR_TEXT);
|
||||
}
|
||||
throw new TypeError(FUNC_ERROR_TEXT);
|
||||
}
|
||||
n = nativeIsFinite(n = +n) ? n : 0;
|
||||
n = toInteger(n);
|
||||
return function() {
|
||||
if (--n < 1) {
|
||||
return func.apply(this, arguments);
|
||||
101
array.js
101
array.js
@@ -1,42 +1,63 @@
|
||||
module.exports = {
|
||||
'chunk': require('./array/chunk'),
|
||||
'compact': require('./array/compact'),
|
||||
'difference': require('./array/difference'),
|
||||
'drop': require('./array/drop'),
|
||||
'dropRight': require('./array/dropRight'),
|
||||
'dropRightWhile': require('./array/dropRightWhile'),
|
||||
'dropWhile': require('./array/dropWhile'),
|
||||
'fill': require('./array/fill'),
|
||||
'findIndex': require('./array/findIndex'),
|
||||
'findLastIndex': require('./array/findLastIndex'),
|
||||
'first': require('./array/first'),
|
||||
'flatten': require('./array/flatten'),
|
||||
'flattenDeep': require('./array/flattenDeep'),
|
||||
'head': require('./array/head'),
|
||||
'indexOf': require('./array/indexOf'),
|
||||
'initial': require('./array/initial'),
|
||||
'intersection': require('./array/intersection'),
|
||||
'last': require('./array/last'),
|
||||
'lastIndexOf': require('./array/lastIndexOf'),
|
||||
'object': require('./array/object'),
|
||||
'pull': require('./array/pull'),
|
||||
'pullAt': require('./array/pullAt'),
|
||||
'remove': require('./array/remove'),
|
||||
'rest': require('./array/rest'),
|
||||
'slice': require('./array/slice'),
|
||||
'sortedIndex': require('./array/sortedIndex'),
|
||||
'sortedLastIndex': require('./array/sortedLastIndex'),
|
||||
'tail': require('./array/tail'),
|
||||
'take': require('./array/take'),
|
||||
'takeRight': require('./array/takeRight'),
|
||||
'takeRightWhile': require('./array/takeRightWhile'),
|
||||
'takeWhile': require('./array/takeWhile'),
|
||||
'union': require('./array/union'),
|
||||
'uniq': require('./array/uniq'),
|
||||
'unique': require('./array/unique'),
|
||||
'unzip': require('./array/unzip'),
|
||||
'without': require('./array/without'),
|
||||
'xor': require('./array/xor'),
|
||||
'zip': require('./array/zip'),
|
||||
'zipObject': require('./array/zipObject')
|
||||
'chunk': require('./chunk'),
|
||||
'compact': require('./compact'),
|
||||
'concat': require('./concat'),
|
||||
'difference': require('./difference'),
|
||||
'differenceBy': require('./differenceBy'),
|
||||
'differenceWith': require('./differenceWith'),
|
||||
'drop': require('./drop'),
|
||||
'dropRight': require('./dropRight'),
|
||||
'dropRightWhile': require('./dropRightWhile'),
|
||||
'dropWhile': require('./dropWhile'),
|
||||
'fill': require('./fill'),
|
||||
'findIndex': require('./findIndex'),
|
||||
'findLastIndex': require('./findLastIndex'),
|
||||
'flatMap': require('./flatMap'),
|
||||
'flatten': require('./flatten'),
|
||||
'flattenDeep': require('./flattenDeep'),
|
||||
'fromPairs': require('./fromPairs'),
|
||||
'head': require('./head'),
|
||||
'indexOf': require('./indexOf'),
|
||||
'initial': require('./initial'),
|
||||
'intersection': require('./intersection'),
|
||||
'intersectionBy': require('./intersectionBy'),
|
||||
'intersectionWith': require('./intersectionWith'),
|
||||
'join': require('./join'),
|
||||
'last': require('./last'),
|
||||
'lastIndexOf': require('./lastIndexOf'),
|
||||
'pull': require('./pull'),
|
||||
'pullAll': require('./pullAll'),
|
||||
'pullAllBy': require('./pullAllBy'),
|
||||
'pullAt': require('./pullAt'),
|
||||
'remove': require('./remove'),
|
||||
'reverse': require('./reverse'),
|
||||
'slice': require('./slice'),
|
||||
'sortedIndex': require('./sortedIndex'),
|
||||
'sortedIndexBy': require('./sortedIndexBy'),
|
||||
'sortedIndexOf': require('./sortedIndexOf'),
|
||||
'sortedLastIndex': require('./sortedLastIndex'),
|
||||
'sortedLastIndexBy': require('./sortedLastIndexBy'),
|
||||
'sortedLastIndexOf': require('./sortedLastIndexOf'),
|
||||
'sortedUniq': require('./sortedUniq'),
|
||||
'sortedUniqBy': require('./sortedUniqBy'),
|
||||
'tail': require('./tail'),
|
||||
'take': require('./take'),
|
||||
'takeRight': require('./takeRight'),
|
||||
'takeRightWhile': require('./takeRightWhile'),
|
||||
'takeWhile': require('./takeWhile'),
|
||||
'union': require('./union'),
|
||||
'unionBy': require('./unionBy'),
|
||||
'unionWith': require('./unionWith'),
|
||||
'uniq': require('./uniq'),
|
||||
'uniqBy': require('./uniqBy'),
|
||||
'uniqWith': require('./uniqWith'),
|
||||
'unzip': require('./unzip'),
|
||||
'unzipWith': require('./unzipWith'),
|
||||
'without': require('./without'),
|
||||
'xor': require('./xor'),
|
||||
'xorBy': require('./xorBy'),
|
||||
'xorWith': require('./xorWith'),
|
||||
'zip': require('./zip'),
|
||||
'zipObject': require('./zipObject'),
|
||||
'zipWith': require('./zipWith')
|
||||
};
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
var baseSlice = require('../internal/baseSlice'),
|
||||
isIterateeCall = require('../internal/isIterateeCall');
|
||||
|
||||
/** Native method references. */
|
||||
var ceil = Math.ceil;
|
||||
|
||||
/* Native method references for those with the same name as other `lodash` methods. */
|
||||
var nativeMax = Math.max;
|
||||
|
||||
/**
|
||||
* Creates an array of elements split into groups the length of `size`.
|
||||
* If `collection` can't be split evenly, the final chunk will be the remaining
|
||||
* elements.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The array to process.
|
||||
* @param {number} [size=1] The length of each chunk.
|
||||
* @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
|
||||
* @returns {Array} Returns the new array containing chunks.
|
||||
* @example
|
||||
*
|
||||
* _.chunk(['a', 'b', 'c', 'd'], 2);
|
||||
* // => [['a', 'b'], ['c', 'd']]
|
||||
*
|
||||
* _.chunk(['a', 'b', 'c', 'd'], 3);
|
||||
* // => [['a', 'b', 'c'], ['d']]
|
||||
*/
|
||||
function chunk(array, size, guard) {
|
||||
if (guard ? isIterateeCall(array, size, guard) : size == null) {
|
||||
size = 1;
|
||||
} else {
|
||||
size = nativeMax(+size || 1, 1);
|
||||
}
|
||||
var index = 0,
|
||||
length = array ? array.length : 0,
|
||||
resIndex = -1,
|
||||
result = Array(ceil(length / size));
|
||||
|
||||
while (index < length) {
|
||||
result[++resIndex] = baseSlice(array, index, (index += size));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = chunk;
|
||||
@@ -1,40 +0,0 @@
|
||||
var baseDifference = require('../internal/baseDifference'),
|
||||
baseFlatten = require('../internal/baseFlatten'),
|
||||
isArguments = require('../lang/isArguments'),
|
||||
isArray = require('../lang/isArray');
|
||||
|
||||
/**
|
||||
* Creates an array excluding all values of the provided arrays using
|
||||
* `SameValueZero` for equality comparisons.
|
||||
*
|
||||
* **Note:** `SameValueZero` comparisons are like strict equality comparisons,
|
||||
* e.g. `===`, except that `NaN` matches `NaN`. See the
|
||||
* [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
|
||||
* for more details.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The array to inspect.
|
||||
* @param {...Array} [values] The arrays of values to exclude.
|
||||
* @returns {Array} Returns the new array of filtered values.
|
||||
* @example
|
||||
*
|
||||
* _.difference([1, 2, 3], [4, 2]);
|
||||
* // => [1, 3]
|
||||
*/
|
||||
function difference() {
|
||||
var args = arguments,
|
||||
index = -1,
|
||||
length = args.length;
|
||||
|
||||
while (++index < length) {
|
||||
var value = args[index];
|
||||
if (isArray(value) || isArguments(value)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return baseDifference(value, baseFlatten(args, false, true, ++index));
|
||||
}
|
||||
|
||||
module.exports = difference;
|
||||
@@ -1,63 +0,0 @@
|
||||
var baseCallback = require('../internal/baseCallback'),
|
||||
baseSlice = require('../internal/baseSlice');
|
||||
|
||||
/**
|
||||
* Creates a slice of `array` excluding elements dropped from the end.
|
||||
* Elements are dropped until `predicate` returns falsey. The predicate is
|
||||
* bound to `thisArg` and invoked with three arguments; (value, index, array).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that match the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The array to query.
|
||||
* @param {Function|Object|string} [predicate=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {Array} Returns the slice of `array`.
|
||||
* @example
|
||||
*
|
||||
* _.dropRightWhile([1, 2, 3], function(n) {
|
||||
* return n > 1;
|
||||
* });
|
||||
* // => [1]
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'active': true },
|
||||
* { 'user': 'fred', 'active': false },
|
||||
* { 'user': 'pebbles', 'active': false }
|
||||
* ];
|
||||
*
|
||||
* // using the `_.matches` callback shorthand
|
||||
* _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');
|
||||
* // => ['barney', 'fred']
|
||||
*
|
||||
* // using the `_.matchesProperty` callback shorthand
|
||||
* _.pluck(_.dropRightWhile(users, 'active', false), 'user');
|
||||
* // => ['barney']
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.pluck(_.dropRightWhile(users, 'active'), 'user');
|
||||
* // => ['barney', 'fred', 'pebbles']
|
||||
*/
|
||||
function dropRightWhile(array, predicate, thisArg) {
|
||||
var length = array ? array.length : 0;
|
||||
if (!length) {
|
||||
return [];
|
||||
}
|
||||
predicate = baseCallback(predicate, thisArg, 3);
|
||||
while (length-- && predicate(array[length], length, array)) {}
|
||||
return baseSlice(array, 0, length + 1);
|
||||
}
|
||||
|
||||
module.exports = dropRightWhile;
|
||||
@@ -1,64 +0,0 @@
|
||||
var baseCallback = require('../internal/baseCallback'),
|
||||
baseSlice = require('../internal/baseSlice');
|
||||
|
||||
/**
|
||||
* Creates a slice of `array` excluding elements dropped from the beginning.
|
||||
* Elements are dropped until `predicate` returns falsey. The predicate is
|
||||
* bound to `thisArg` and invoked with three arguments; (value, index, array).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The array to query.
|
||||
* @param {Function|Object|string} [predicate=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {Array} Returns the slice of `array`.
|
||||
* @example
|
||||
*
|
||||
* _.dropWhile([1, 2, 3], function(n) {
|
||||
* return n < 3;
|
||||
* });
|
||||
* // => [3]
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'active': false },
|
||||
* { 'user': 'fred', 'active': false },
|
||||
* { 'user': 'pebbles', 'active': true }
|
||||
* ];
|
||||
*
|
||||
* // using the `_.matches` callback shorthand
|
||||
* _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user');
|
||||
* // => ['fred', 'pebbles']
|
||||
*
|
||||
* // using the `_.matchesProperty` callback shorthand
|
||||
* _.pluck(_.dropWhile(users, 'active', false), 'user');
|
||||
* // => ['pebbles']
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.pluck(_.dropWhile(users, 'active'), 'user');
|
||||
* // => ['barney', 'fred', 'pebbles']
|
||||
*/
|
||||
function dropWhile(array, predicate, thisArg) {
|
||||
var length = array ? array.length : 0;
|
||||
if (!length) {
|
||||
return [];
|
||||
}
|
||||
var index = -1;
|
||||
predicate = baseCallback(predicate, thisArg, 3);
|
||||
while (++index < length && predicate(array[index], index, array)) {}
|
||||
return baseSlice(array, index);
|
||||
}
|
||||
|
||||
module.exports = dropWhile;
|
||||
@@ -1,64 +0,0 @@
|
||||
var baseCallback = require('../internal/baseCallback');
|
||||
|
||||
/**
|
||||
* This method is like `_.find` except that it returns the index of the first
|
||||
* element `predicate` returns truthy for, instead of the element itself.
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The array to search.
|
||||
* @param {Function|Object|string} [predicate=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {number} Returns the index of the found element, else `-1`.
|
||||
* @example
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'active': false },
|
||||
* { 'user': 'fred', 'active': false },
|
||||
* { 'user': 'pebbles', 'active': true }
|
||||
* ];
|
||||
*
|
||||
* _.findIndex(users, function(chr) {
|
||||
* return chr.user == 'barney';
|
||||
* });
|
||||
* // => 0
|
||||
*
|
||||
* // using the `_.matches` callback shorthand
|
||||
* _.findIndex(users, { 'user': 'fred', 'active': false });
|
||||
* // => 1
|
||||
*
|
||||
* // using the `_.matchesProperty` callback shorthand
|
||||
* _.findIndex(users, 'active', false);
|
||||
* // => 0
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.findIndex(users, 'active');
|
||||
* // => 2
|
||||
*/
|
||||
function findIndex(array, predicate, thisArg) {
|
||||
var index = -1,
|
||||
length = array ? array.length : 0;
|
||||
|
||||
predicate = baseCallback(predicate, thisArg, 3);
|
||||
while (++index < length) {
|
||||
if (predicate(array[index], index, array)) {
|
||||
return index;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
module.exports = findIndex;
|
||||
@@ -1,62 +0,0 @@
|
||||
var baseCallback = require('../internal/baseCallback');
|
||||
|
||||
/**
|
||||
* This method is like `_.findIndex` except that it iterates over elements
|
||||
* of `collection` from right to left.
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The array to search.
|
||||
* @param {Function|Object|string} [predicate=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {number} Returns the index of the found element, else `-1`.
|
||||
* @example
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'active': true },
|
||||
* { 'user': 'fred', 'active': false },
|
||||
* { 'user': 'pebbles', 'active': false }
|
||||
* ];
|
||||
*
|
||||
* _.findLastIndex(users, function(chr) {
|
||||
* return chr.user == 'pebbles';
|
||||
* });
|
||||
* // => 2
|
||||
*
|
||||
* // using the `_.matches` callback shorthand
|
||||
* _.findLastIndex(users, { 'user': 'barney', 'active': true });
|
||||
* // => 0
|
||||
*
|
||||
* // using the `_.matchesProperty` callback shorthand
|
||||
* _.findLastIndex(users, 'active', false);
|
||||
* // => 2
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.findLastIndex(users, 'active');
|
||||
* // => 0
|
||||
*/
|
||||
function findLastIndex(array, predicate, thisArg) {
|
||||
var length = array ? array.length : 0;
|
||||
predicate = baseCallback(predicate, thisArg, 3);
|
||||
while (length--) {
|
||||
if (predicate(array[length], length, array)) {
|
||||
return length;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
module.exports = findLastIndex;
|
||||
@@ -1,32 +0,0 @@
|
||||
var baseFlatten = require('../internal/baseFlatten'),
|
||||
isIterateeCall = require('../internal/isIterateeCall');
|
||||
|
||||
/**
|
||||
* Flattens a nested array. If `isDeep` is `true` the array is recursively
|
||||
* flattened, otherwise it is only flattened a single level.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The array to flatten.
|
||||
* @param {boolean} [isDeep] Specify a deep flatten.
|
||||
* @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
|
||||
* @returns {Array} Returns the new flattened array.
|
||||
* @example
|
||||
*
|
||||
* _.flatten([1, [2, 3, [4]]]);
|
||||
* // => [1, 2, 3, [4]];
|
||||
*
|
||||
* // using `isDeep`
|
||||
* _.flatten([1, [2, 3, [4]]], true);
|
||||
* // => [1, 2, 3, 4];
|
||||
*/
|
||||
function flatten(array, isDeep, guard) {
|
||||
var length = array ? array.length : 0;
|
||||
if (guard && isIterateeCall(array, isDeep, guard)) {
|
||||
isDeep = false;
|
||||
}
|
||||
return length ? baseFlatten(array, isDeep, false, 0) : [];
|
||||
}
|
||||
|
||||
module.exports = flatten;
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./first');
|
||||
@@ -1,55 +0,0 @@
|
||||
var baseIndexOf = require('../internal/baseIndexOf'),
|
||||
binaryIndex = require('../internal/binaryIndex');
|
||||
|
||||
/* Native method references for those with the same name as other `lodash` methods. */
|
||||
var nativeMax = Math.max;
|
||||
|
||||
/**
|
||||
* Gets the index at which the first occurrence of `value` is found in `array`
|
||||
* using `SameValueZero` for equality comparisons. If `fromIndex` is negative,
|
||||
* it is used as the offset from the end of `array`. If `array` is sorted
|
||||
* providing `true` for `fromIndex` performs a faster binary search.
|
||||
*
|
||||
* **Note:** `SameValueZero` comparisons are like strict equality comparisons,
|
||||
* e.g. `===`, except that `NaN` matches `NaN`. See the
|
||||
* [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
|
||||
* for more details.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The array to search.
|
||||
* @param {*} value The value to search for.
|
||||
* @param {boolean|number} [fromIndex=0] The index to search from or `true`
|
||||
* to perform a binary search on a sorted array.
|
||||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||||
* @example
|
||||
*
|
||||
* _.indexOf([1, 2, 1, 2], 2);
|
||||
* // => 1
|
||||
*
|
||||
* // using `fromIndex`
|
||||
* _.indexOf([1, 2, 1, 2], 2, 2);
|
||||
* // => 3
|
||||
*
|
||||
* // performing a binary search
|
||||
* _.indexOf([1, 1, 2, 2], 2, true);
|
||||
* // => 2
|
||||
*/
|
||||
function indexOf(array, value, fromIndex) {
|
||||
var length = array ? array.length : 0;
|
||||
if (!length) {
|
||||
return -1;
|
||||
}
|
||||
if (typeof fromIndex == 'number') {
|
||||
fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;
|
||||
} else if (fromIndex) {
|
||||
var index = binaryIndex(array, value),
|
||||
other = array[index];
|
||||
|
||||
return (value === value ? value === other : other !== other) ? index : -1;
|
||||
}
|
||||
return baseIndexOf(array, value, fromIndex || 0);
|
||||
}
|
||||
|
||||
module.exports = indexOf;
|
||||
@@ -1,67 +0,0 @@
|
||||
var baseIndexOf = require('../internal/baseIndexOf'),
|
||||
cacheIndexOf = require('../internal/cacheIndexOf'),
|
||||
createCache = require('../internal/createCache'),
|
||||
isArguments = require('../lang/isArguments'),
|
||||
isArray = require('../lang/isArray');
|
||||
|
||||
/**
|
||||
* Creates an array of unique values in all provided arrays using `SameValueZero`
|
||||
* for equality comparisons.
|
||||
*
|
||||
* **Note:** `SameValueZero` comparisons are like strict equality comparisons,
|
||||
* e.g. `===`, except that `NaN` matches `NaN`. See the
|
||||
* [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
|
||||
* for more details.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {...Array} [arrays] The arrays to inspect.
|
||||
* @returns {Array} Returns the new array of shared values.
|
||||
* @example
|
||||
* _.intersection([1, 2], [4, 2], [2, 1]);
|
||||
* // => [2]
|
||||
*/
|
||||
function intersection() {
|
||||
var args = [],
|
||||
argsIndex = -1,
|
||||
argsLength = arguments.length,
|
||||
caches = [],
|
||||
indexOf = baseIndexOf,
|
||||
isCommon = true;
|
||||
|
||||
while (++argsIndex < argsLength) {
|
||||
var value = arguments[argsIndex];
|
||||
if (isArray(value) || isArguments(value)) {
|
||||
args.push(value);
|
||||
caches.push((isCommon && value.length >= 120) ? createCache(argsIndex && value) : null);
|
||||
}
|
||||
}
|
||||
argsLength = args.length;
|
||||
var array = args[0],
|
||||
index = -1,
|
||||
length = array ? array.length : 0,
|
||||
result = [],
|
||||
seen = caches[0];
|
||||
|
||||
outer:
|
||||
while (++index < length) {
|
||||
value = array[index];
|
||||
if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) {
|
||||
argsIndex = argsLength;
|
||||
while (--argsIndex) {
|
||||
var cache = caches[argsIndex];
|
||||
if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value, 0)) < 0) {
|
||||
continue outer;
|
||||
}
|
||||
}
|
||||
if (seen) {
|
||||
seen.push(value);
|
||||
}
|
||||
result.push(value);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = intersection;
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./zipObject');
|
||||
@@ -1,55 +0,0 @@
|
||||
var baseIndexOf = require('../internal/baseIndexOf');
|
||||
|
||||
/** Used for native method references. */
|
||||
var arrayProto = Array.prototype;
|
||||
|
||||
/** Native method references. */
|
||||
var splice = arrayProto.splice;
|
||||
|
||||
/**
|
||||
* Removes all provided values from `array` using `SameValueZero` for equality
|
||||
* comparisons.
|
||||
*
|
||||
* **Notes:**
|
||||
* - Unlike `_.without`, this method mutates `array`.
|
||||
* - `SameValueZero` comparisons are like strict equality comparisons, e.g. `===`,
|
||||
* except that `NaN` matches `NaN`. See the [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
|
||||
* for more details.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The array to modify.
|
||||
* @param {...*} [values] The values to remove.
|
||||
* @returns {Array} Returns `array`.
|
||||
* @example
|
||||
*
|
||||
* var array = [1, 2, 3, 1, 2, 3];
|
||||
*
|
||||
* _.pull(array, 2, 3);
|
||||
* console.log(array);
|
||||
* // => [1, 1]
|
||||
*/
|
||||
function pull() {
|
||||
var args = arguments,
|
||||
array = args[0];
|
||||
|
||||
if (!(array && array.length)) {
|
||||
return array;
|
||||
}
|
||||
var index = 0,
|
||||
indexOf = baseIndexOf,
|
||||
length = args.length;
|
||||
|
||||
while (++index < length) {
|
||||
var fromIndex = 0,
|
||||
value = args[index];
|
||||
|
||||
while ((fromIndex = indexOf(array, value, fromIndex)) > -1) {
|
||||
splice.call(array, fromIndex, 1);
|
||||
}
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
module.exports = pull;
|
||||
@@ -1,33 +0,0 @@
|
||||
var baseFlatten = require('../internal/baseFlatten'),
|
||||
basePullAt = require('../internal/basePullAt');
|
||||
|
||||
/**
|
||||
* Removes elements from `array` corresponding to the given indexes and returns
|
||||
* an array of the removed elements. Indexes may be specified as an array of
|
||||
* indexes or as individual arguments.
|
||||
*
|
||||
* **Note:** Unlike `_.at`, this method mutates `array`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The array to modify.
|
||||
* @param {...(number|number[])} [indexes] The indexes of elements to remove,
|
||||
* specified as individual indexes or arrays of indexes.
|
||||
* @returns {Array} Returns the new array of removed elements.
|
||||
* @example
|
||||
*
|
||||
* var array = [5, 10, 15, 20];
|
||||
* var evens = _.pullAt(array, 1, 3);
|
||||
*
|
||||
* console.log(array);
|
||||
* // => [5, 15]
|
||||
*
|
||||
* console.log(evens);
|
||||
* // => [10, 20]
|
||||
*/
|
||||
function pullAt(array) {
|
||||
return basePullAt(array || [], baseFlatten(arguments, false, false, 1));
|
||||
}
|
||||
|
||||
module.exports = pullAt;
|
||||
@@ -1,65 +0,0 @@
|
||||
var baseCallback = require('../internal/baseCallback');
|
||||
|
||||
/** Used for native method references. */
|
||||
var arrayProto = Array.prototype;
|
||||
|
||||
/** Native method references. */
|
||||
var splice = arrayProto.splice;
|
||||
|
||||
/**
|
||||
* Removes all elements from `array` that `predicate` returns truthy for
|
||||
* and returns an array of the removed elements. The predicate is bound to
|
||||
* `thisArg` and invoked with three arguments; (value, index, array).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* **Note:** Unlike `_.filter`, this method mutates `array`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The array to modify.
|
||||
* @param {Function|Object|string} [predicate=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {Array} Returns the new array of removed elements.
|
||||
* @example
|
||||
*
|
||||
* var array = [1, 2, 3, 4];
|
||||
* var evens = _.remove(array, function(n) {
|
||||
* return n % 2 == 0;
|
||||
* });
|
||||
*
|
||||
* console.log(array);
|
||||
* // => [1, 3]
|
||||
*
|
||||
* console.log(evens);
|
||||
* // => [2, 4]
|
||||
*/
|
||||
function remove(array, predicate, thisArg) {
|
||||
var index = -1,
|
||||
length = array ? array.length : 0,
|
||||
result = [];
|
||||
|
||||
predicate = baseCallback(predicate, thisArg, 3);
|
||||
while (++index < length) {
|
||||
var value = array[index];
|
||||
if (predicate(value, index, array)) {
|
||||
result.push(value);
|
||||
splice.call(array, index--, 1);
|
||||
length--;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = remove;
|
||||
@@ -1,59 +0,0 @@
|
||||
var baseCallback = require('../internal/baseCallback'),
|
||||
binaryIndex = require('../internal/binaryIndex'),
|
||||
binaryIndexBy = require('../internal/binaryIndexBy');
|
||||
|
||||
/**
|
||||
* Uses a binary search to determine the lowest index at which `value` should
|
||||
* be inserted into `array` in order to maintain its sort order. If an iteratee
|
||||
* function is provided it is invoked for `value` and each element of `array`
|
||||
* to compute their sort ranking. The iteratee is bound to `thisArg` and
|
||||
* invoked with one argument; (value).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The sorted array to inspect.
|
||||
* @param {*} value The value to evaluate.
|
||||
* @param {Function|Object|string} [iteratee=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {number} Returns the index at which `value` should be inserted
|
||||
* into `array`.
|
||||
* @example
|
||||
*
|
||||
* _.sortedIndex([30, 50], 40);
|
||||
* // => 1
|
||||
*
|
||||
* _.sortedIndex([4, 4, 5, 5], 5);
|
||||
* // => 2
|
||||
*
|
||||
* var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } };
|
||||
*
|
||||
* // using an iteratee function
|
||||
* _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) {
|
||||
* return this.data[word];
|
||||
* }, dict);
|
||||
* // => 1
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
|
||||
* // => 1
|
||||
*/
|
||||
function sortedIndex(array, value, iteratee, thisArg) {
|
||||
return iteratee == null
|
||||
? binaryIndex(array, value)
|
||||
: binaryIndexBy(array, value, baseCallback(iteratee, thisArg, 1));
|
||||
}
|
||||
|
||||
module.exports = sortedIndex;
|
||||
@@ -1,31 +0,0 @@
|
||||
var baseCallback = require('../internal/baseCallback'),
|
||||
binaryIndex = require('../internal/binaryIndex'),
|
||||
binaryIndexBy = require('../internal/binaryIndexBy');
|
||||
|
||||
/**
|
||||
* This method is like `_.sortedIndex` except that it returns the highest
|
||||
* index at which `value` should be inserted into `array` in order to
|
||||
* maintain its sort order.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The sorted array to inspect.
|
||||
* @param {*} value The value to evaluate.
|
||||
* @param {Function|Object|string} [iteratee=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {number} Returns the index at which `value` should be inserted
|
||||
* into `array`.
|
||||
* @example
|
||||
*
|
||||
* _.sortedLastIndex([4, 4, 5, 5], 5);
|
||||
* // => 4
|
||||
*/
|
||||
function sortedLastIndex(array, value, iteratee, thisArg) {
|
||||
return iteratee == null
|
||||
? binaryIndex(array, value, true)
|
||||
: binaryIndexBy(array, value, baseCallback(iteratee, thisArg, 1), true);
|
||||
}
|
||||
|
||||
module.exports = sortedLastIndex;
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./rest');
|
||||
@@ -1,63 +0,0 @@
|
||||
var baseCallback = require('../internal/baseCallback'),
|
||||
baseSlice = require('../internal/baseSlice');
|
||||
|
||||
/**
|
||||
* Creates a slice of `array` with elements taken from the end. Elements are
|
||||
* taken until `predicate` returns falsey. The predicate is bound to `thisArg`
|
||||
* and invoked with three arguments; (value, index, array).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The array to query.
|
||||
* @param {Function|Object|string} [predicate=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {Array} Returns the slice of `array`.
|
||||
* @example
|
||||
*
|
||||
* _.takeRightWhile([1, 2, 3], function(n) {
|
||||
* return n > 1;
|
||||
* });
|
||||
* // => [2, 3]
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'active': true },
|
||||
* { 'user': 'fred', 'active': false },
|
||||
* { 'user': 'pebbles', 'active': false }
|
||||
* ];
|
||||
*
|
||||
* // using the `_.matches` callback shorthand
|
||||
* _.pluck(_.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');
|
||||
* // => ['pebbles']
|
||||
*
|
||||
* // using the `_.matchesProperty` callback shorthand
|
||||
* _.pluck(_.takeRightWhile(users, 'active', false), 'user');
|
||||
* // => ['fred', 'pebbles']
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.pluck(_.takeRightWhile(users, 'active'), 'user');
|
||||
* // => []
|
||||
*/
|
||||
function takeRightWhile(array, predicate, thisArg) {
|
||||
var length = array ? array.length : 0;
|
||||
if (!length) {
|
||||
return [];
|
||||
}
|
||||
predicate = baseCallback(predicate, thisArg, 3);
|
||||
while (length-- && predicate(array[length], length, array)) {}
|
||||
return baseSlice(array, length + 1);
|
||||
}
|
||||
|
||||
module.exports = takeRightWhile;
|
||||
@@ -1,64 +0,0 @@
|
||||
var baseCallback = require('../internal/baseCallback'),
|
||||
baseSlice = require('../internal/baseSlice');
|
||||
|
||||
/**
|
||||
* Creates a slice of `array` with elements taken from the beginning. Elements
|
||||
* are taken until `predicate` returns falsey. The predicate is bound to
|
||||
* `thisArg` and invoked with three arguments; (value, index, array).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The array to query.
|
||||
* @param {Function|Object|string} [predicate=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {Array} Returns the slice of `array`.
|
||||
* @example
|
||||
*
|
||||
* _.takeWhile([1, 2, 3], function(n) {
|
||||
* return n < 3;
|
||||
* });
|
||||
* // => [1, 2]
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'active': false },
|
||||
* { 'user': 'fred', 'active': false},
|
||||
* { 'user': 'pebbles', 'active': true }
|
||||
* ];
|
||||
*
|
||||
* // using the `_.matches` callback shorthand
|
||||
* _.pluck(_.takeWhile(users, { 'user': 'barney', 'active': false }), 'user');
|
||||
* // => ['barney']
|
||||
*
|
||||
* // using the `_.matchesProperty` callback shorthand
|
||||
* _.pluck(_.takeWhile(users, 'active', false), 'user');
|
||||
* // => ['barney', 'fred']
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.pluck(_.takeWhile(users, 'active'), 'user');
|
||||
* // => []
|
||||
*/
|
||||
function takeWhile(array, predicate, thisArg) {
|
||||
var length = array ? array.length : 0;
|
||||
if (!length) {
|
||||
return [];
|
||||
}
|
||||
var index = -1;
|
||||
predicate = baseCallback(predicate, thisArg, 3);
|
||||
while (++index < length && predicate(array[index], index, array)) {}
|
||||
return baseSlice(array, 0, index);
|
||||
}
|
||||
|
||||
module.exports = takeWhile;
|
||||
@@ -1,27 +0,0 @@
|
||||
var baseFlatten = require('../internal/baseFlatten'),
|
||||
baseUniq = require('../internal/baseUniq');
|
||||
|
||||
/**
|
||||
* Creates an array of unique values, in order, of the provided arrays using
|
||||
* `SameValueZero` for equality comparisons.
|
||||
*
|
||||
* **Note:** `SameValueZero` comparisons are like strict equality comparisons,
|
||||
* e.g. `===`, except that `NaN` matches `NaN`. See the
|
||||
* [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
|
||||
* for more details.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {...Array} [arrays] The arrays to inspect.
|
||||
* @returns {Array} Returns the new array of combined values.
|
||||
* @example
|
||||
*
|
||||
* _.union([1, 2], [4, 2], [2, 1]);
|
||||
* // => [1, 2, 4]
|
||||
*/
|
||||
function union() {
|
||||
return baseUniq(baseFlatten(arguments, false, true, 0));
|
||||
}
|
||||
|
||||
module.exports = union;
|
||||
@@ -1,74 +0,0 @@
|
||||
var baseCallback = require('../internal/baseCallback'),
|
||||
baseUniq = require('../internal/baseUniq'),
|
||||
isIterateeCall = require('../internal/isIterateeCall'),
|
||||
sortedUniq = require('../internal/sortedUniq');
|
||||
|
||||
/**
|
||||
* Creates a duplicate-value-free version of an array using `SameValueZero`
|
||||
* for equality comparisons. Providing `true` for `isSorted` performs a faster
|
||||
* search algorithm for sorted arrays. If an iteratee function is provided it
|
||||
* is invoked for each value in the array to generate the criterion by which
|
||||
* uniqueness is computed. The `iteratee` is bound to `thisArg` and invoked
|
||||
* with three arguments; (value, index, array).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* **Note:** `SameValueZero` comparisons are like strict equality comparisons,
|
||||
* e.g. `===`, except that `NaN` matches `NaN`. See the
|
||||
* [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
|
||||
* for more details.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @alias unique
|
||||
* @category Array
|
||||
* @param {Array} array The array to inspect.
|
||||
* @param {boolean} [isSorted] Specify the array is sorted.
|
||||
* @param {Function|Object|string} [iteratee] The function invoked per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {Array} Returns the new duplicate-value-free array.
|
||||
* @example
|
||||
*
|
||||
* _.uniq([1, 2, 1]);
|
||||
* // => [1, 2]
|
||||
*
|
||||
* // using `isSorted`
|
||||
* _.uniq([1, 1, 2], true);
|
||||
* // => [1, 2]
|
||||
*
|
||||
* // using an iteratee function
|
||||
* _.uniq([1, 2.5, 1.5, 2], function(n) {
|
||||
* return this.floor(n);
|
||||
* }, Math);
|
||||
* // => [1, 2.5]
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
|
||||
* // => [{ 'x': 1 }, { 'x': 2 }]
|
||||
*/
|
||||
function uniq(array, isSorted, iteratee, thisArg) {
|
||||
var length = array ? array.length : 0;
|
||||
if (!length) {
|
||||
return [];
|
||||
}
|
||||
if (isSorted != null && typeof isSorted != 'boolean') {
|
||||
thisArg = iteratee;
|
||||
iteratee = isIterateeCall(array, isSorted, thisArg) ? null : isSorted;
|
||||
isSorted = false;
|
||||
}
|
||||
iteratee = iteratee == null ? iteratee : baseCallback(iteratee, thisArg, 3);
|
||||
return (isSorted)
|
||||
? sortedUniq(array, iteratee)
|
||||
: baseUniq(array, iteratee);
|
||||
}
|
||||
|
||||
module.exports = uniq;
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./uniq');
|
||||
@@ -1,37 +0,0 @@
|
||||
var arrayMap = require('../internal/arrayMap'),
|
||||
arrayMax = require('../internal/arrayMax'),
|
||||
baseProperty = require('../internal/baseProperty');
|
||||
|
||||
/** Used to the length of n-tuples for `_.unzip`. */
|
||||
var getLength = baseProperty('length');
|
||||
|
||||
/**
|
||||
* This method is like `_.zip` except that it accepts an array of grouped
|
||||
* elements and creates an array regrouping the elements to their pre-`_.zip`
|
||||
* configuration.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The array of grouped elements to process.
|
||||
* @returns {Array} Returns the new array of regrouped elements.
|
||||
* @example
|
||||
*
|
||||
* var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]);
|
||||
* // => [['fred', 30, true], ['barney', 40, false]]
|
||||
*
|
||||
* _.unzip(zipped);
|
||||
* // => [['fred', 'barney'], [30, 40], [true, false]]
|
||||
*/
|
||||
function unzip(array) {
|
||||
var index = -1,
|
||||
length = (array && array.length && arrayMax(arrayMap(array, getLength))) >>> 0,
|
||||
result = Array(length);
|
||||
|
||||
while (++index < length) {
|
||||
result[index] = arrayMap(array, baseProperty(index));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = unzip;
|
||||
@@ -1,28 +0,0 @@
|
||||
var baseDifference = require('../internal/baseDifference'),
|
||||
baseSlice = require('../internal/baseSlice');
|
||||
|
||||
/**
|
||||
* Creates an array excluding all provided values using `SameValueZero` for
|
||||
* equality comparisons.
|
||||
*
|
||||
* **Note:** `SameValueZero` comparisons are like strict equality comparisons,
|
||||
* e.g. `===`, except that `NaN` matches `NaN`. See the
|
||||
* [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
|
||||
* for more details.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The array to filter.
|
||||
* @param {...*} [values] The values to exclude.
|
||||
* @returns {Array} Returns the new array of filtered values.
|
||||
* @example
|
||||
*
|
||||
* _.without([1, 2, 1, 3], 1, 2);
|
||||
* // => [3]
|
||||
*/
|
||||
function without(array) {
|
||||
return baseDifference(array, baseSlice(arguments, 1));
|
||||
}
|
||||
|
||||
module.exports = without;
|
||||
36
array/xor.js
36
array/xor.js
@@ -1,36 +0,0 @@
|
||||
var baseDifference = require('../internal/baseDifference'),
|
||||
baseUniq = require('../internal/baseUniq'),
|
||||
isArguments = require('../lang/isArguments'),
|
||||
isArray = require('../lang/isArray');
|
||||
|
||||
/**
|
||||
* Creates an array that is the symmetric difference of the provided arrays.
|
||||
* See [Wikipedia](https://en.wikipedia.org/wiki/Symmetric_difference) for
|
||||
* more details.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {...Array} [arrays] The arrays to inspect.
|
||||
* @returns {Array} Returns the new array of values.
|
||||
* @example
|
||||
*
|
||||
* _.xor([1, 2], [4, 2]);
|
||||
* // => [1, 4]
|
||||
*/
|
||||
function xor() {
|
||||
var index = -1,
|
||||
length = arguments.length;
|
||||
|
||||
while (++index < length) {
|
||||
var array = arguments[index];
|
||||
if (isArray(array) || isArguments(array)) {
|
||||
var result = result
|
||||
? baseDifference(result, array).concat(baseDifference(array, result))
|
||||
: array;
|
||||
}
|
||||
}
|
||||
return result ? baseUniq(result) : [];
|
||||
}
|
||||
|
||||
module.exports = xor;
|
||||
@@ -1,39 +0,0 @@
|
||||
var isArray = require('../lang/isArray');
|
||||
|
||||
/**
|
||||
* Creates an object composed from arrays of property names and values. Provide
|
||||
* either a single two dimensional array, e.g. `[[key1, value1], [key2, value2]]`
|
||||
* or two arrays, one of property names and one of corresponding values.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @alias object
|
||||
* @category Array
|
||||
* @param {Array} props The property names.
|
||||
* @param {Array} [values=[]] The property values.
|
||||
* @returns {Object} Returns the new object.
|
||||
* @example
|
||||
*
|
||||
* _.zipObject(['fred', 'barney'], [30, 40]);
|
||||
* // => { 'fred': 30, 'barney': 40 }
|
||||
*/
|
||||
function zipObject(props, values) {
|
||||
var index = -1,
|
||||
length = props ? props.length : 0,
|
||||
result = {};
|
||||
|
||||
if (length && !values && !isArray(props[0])) {
|
||||
values = [];
|
||||
}
|
||||
while (++index < length) {
|
||||
var key = props[index];
|
||||
if (values) {
|
||||
result[key] = values[index];
|
||||
} else if (key) {
|
||||
result[key[0]] = key[1];
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = zipObject;
|
||||
28
ary.js
Normal file
28
ary.js
Normal file
@@ -0,0 +1,28 @@
|
||||
var createWrapper = require('./internal/createWrapper');
|
||||
|
||||
/** Used to compose bitmasks for wrapper metadata. */
|
||||
var ARY_FLAG = 128;
|
||||
|
||||
/**
|
||||
* Creates a function that accepts up to `n` arguments, ignoring any
|
||||
* additional arguments.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Function
|
||||
* @param {Function} func The function to cap arguments for.
|
||||
* @param {number} [n=func.length] The arity cap.
|
||||
* @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`.
|
||||
* @returns {Function} Returns the new function.
|
||||
* @example
|
||||
*
|
||||
* _.map(['6', '8', '10'], _.ary(parseInt, 1));
|
||||
* // => [6, 8, 10]
|
||||
*/
|
||||
function ary(func, n, guard) {
|
||||
n = guard ? undefined : n;
|
||||
n = (func && n == null) ? func.length : n;
|
||||
return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);
|
||||
}
|
||||
|
||||
module.exports = ary;
|
||||
39
assign.js
Normal file
39
assign.js
Normal file
@@ -0,0 +1,39 @@
|
||||
var copyObject = require('./internal/copyObject'),
|
||||
createAssigner = require('./internal/createAssigner'),
|
||||
keys = require('./keys');
|
||||
|
||||
/**
|
||||
* Assigns own enumerable properties of source objects to the destination
|
||||
* object. Source objects are applied from left to right. Subsequent sources
|
||||
* overwrite property assignments of previous sources.
|
||||
*
|
||||
* **Note:** This method mutates `object` and is loosely based on
|
||||
* [`Object.assign`](https://mdn.io/Object/assign).
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The destination object.
|
||||
* @param {...Object} [sources] The source objects.
|
||||
* @returns {Object} Returns `object`.
|
||||
* @example
|
||||
*
|
||||
* function Foo() {
|
||||
* this.c = 3;
|
||||
* }
|
||||
*
|
||||
* function Bar() {
|
||||
* this.e = 5;
|
||||
* }
|
||||
*
|
||||
* Foo.prototype.d = 4;
|
||||
* Bar.prototype.f = 6;
|
||||
*
|
||||
* _.assign({ 'a': 1 }, new Foo, new Bar);
|
||||
* // => { 'a': 1, 'c': 3, 'e': 5 }
|
||||
*/
|
||||
var assign = createAssigner(function(object, source) {
|
||||
copyObject(source, keys(source), object);
|
||||
});
|
||||
|
||||
module.exports = assign;
|
||||
38
assignIn.js
Normal file
38
assignIn.js
Normal file
@@ -0,0 +1,38 @@
|
||||
var copyObject = require('./internal/copyObject'),
|
||||
createAssigner = require('./internal/createAssigner'),
|
||||
keysIn = require('./keysIn');
|
||||
|
||||
/**
|
||||
* This method is like `_.assign` except that it iterates over own and
|
||||
* inherited source properties.
|
||||
*
|
||||
* **Note:** This method mutates `object`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @alias extend
|
||||
* @category Object
|
||||
* @param {Object} object The destination object.
|
||||
* @param {...Object} [sources] The source objects.
|
||||
* @returns {Object} Returns `object`.
|
||||
* @example
|
||||
*
|
||||
* function Foo() {
|
||||
* this.b = 2;
|
||||
* }
|
||||
*
|
||||
* function Bar() {
|
||||
* this.d = 4;
|
||||
* }
|
||||
*
|
||||
* Foo.prototype.c = 3;
|
||||
* Bar.prototype.e = 5;
|
||||
*
|
||||
* _.assignIn({ 'a': 1 }, new Foo, new Bar);
|
||||
* // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5 }
|
||||
*/
|
||||
var assignIn = createAssigner(function(object, source) {
|
||||
copyObject(source, keysIn(source), object);
|
||||
});
|
||||
|
||||
module.exports = assignIn;
|
||||
36
assignInWith.js
Normal file
36
assignInWith.js
Normal file
@@ -0,0 +1,36 @@
|
||||
var copyObjectWith = require('./internal/copyObjectWith'),
|
||||
createAssigner = require('./internal/createAssigner'),
|
||||
keysIn = require('./keysIn');
|
||||
|
||||
/**
|
||||
* This method is like `_.assignIn` except that it accepts `customizer` which
|
||||
* is invoked to produce the assigned values. If `customizer` returns `undefined`
|
||||
* assignment is handled by the method instead. The `customizer` is invoked
|
||||
* with five arguments: (objValue, srcValue, key, object, source).
|
||||
*
|
||||
* **Note:** This method mutates `object`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @alias extendWith
|
||||
* @category Object
|
||||
* @param {Object} object The destination object.
|
||||
* @param {...Object} sources The source objects.
|
||||
* @param {Function} [customizer] The function to customize assigned values.
|
||||
* @returns {Object} Returns `object`.
|
||||
* @example
|
||||
*
|
||||
* function customizer(objValue, srcValue) {
|
||||
* return _.isUndefined(objValue) ? srcValue : objValue;
|
||||
* }
|
||||
*
|
||||
* var defaults = _.partialRight(_.assignInWith, customizer);
|
||||
*
|
||||
* defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
|
||||
* // => { 'a': 1, 'b': 2 }
|
||||
*/
|
||||
var assignInWith = createAssigner(function(object, source, customizer) {
|
||||
copyObjectWith(source, keysIn(source), object, customizer);
|
||||
});
|
||||
|
||||
module.exports = assignInWith;
|
||||
35
assignWith.js
Normal file
35
assignWith.js
Normal file
@@ -0,0 +1,35 @@
|
||||
var copyObjectWith = require('./internal/copyObjectWith'),
|
||||
createAssigner = require('./internal/createAssigner'),
|
||||
keys = require('./keys');
|
||||
|
||||
/**
|
||||
* This method is like `_.assign` except that it accepts `customizer` which
|
||||
* is invoked to produce the assigned values. If `customizer` returns `undefined`
|
||||
* assignment is handled by the method instead. The `customizer` is invoked
|
||||
* with five arguments: (objValue, srcValue, key, object, source).
|
||||
*
|
||||
* **Note:** This method mutates `object`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The destination object.
|
||||
* @param {...Object} sources The source objects.
|
||||
* @param {Function} [customizer] The function to customize assigned values.
|
||||
* @returns {Object} Returns `object`.
|
||||
* @example
|
||||
*
|
||||
* function customizer(objValue, srcValue) {
|
||||
* return _.isUndefined(objValue) ? srcValue : objValue;
|
||||
* }
|
||||
*
|
||||
* var defaults = _.partialRight(_.assignWith, customizer);
|
||||
*
|
||||
* defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
|
||||
* // => { 'a': 1, 'b': 2 }
|
||||
*/
|
||||
var assignWith = createAssigner(function(object, source, customizer) {
|
||||
copyObjectWith(source, keys(source), object, customizer);
|
||||
});
|
||||
|
||||
module.exports = assignWith;
|
||||
29
at.js
Normal file
29
at.js
Normal file
@@ -0,0 +1,29 @@
|
||||
var baseAt = require('./internal/baseAt'),
|
||||
baseFlatten = require('./internal/baseFlatten'),
|
||||
rest = require('./rest');
|
||||
|
||||
/**
|
||||
* Creates an array of values corresponding to `paths` of `object`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The object to iterate over.
|
||||
* @param {...(string|string[])} [paths] The property paths of elements to pick,
|
||||
* specified individually or in arrays.
|
||||
* @returns {Array} Returns the new array of picked elements.
|
||||
* @example
|
||||
*
|
||||
* var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
|
||||
*
|
||||
* _.at(object, ['a[0].b.c', 'a[1]']);
|
||||
* // => [3, 4]
|
||||
*
|
||||
* _.at(['a', 'b', 'c'], 0, 2);
|
||||
* // => ['a', 'c']
|
||||
*/
|
||||
var at = rest(function(object, paths) {
|
||||
return baseAt(object, baseFlatten(paths));
|
||||
});
|
||||
|
||||
module.exports = at;
|
||||
@@ -1,13 +1,15 @@
|
||||
var isError = require('../lang/isError');
|
||||
var apply = require('./internal/apply'),
|
||||
isError = require('./isError'),
|
||||
rest = require('./rest');
|
||||
|
||||
/**
|
||||
* Attempts to invoke `func`, returning either the result or the caught error
|
||||
* object. Any additional arguments are provided to `func` when it is invoked.
|
||||
* object. Any additional arguments are provided to `func` when it's invoked.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Utility
|
||||
* @param {*} func The function to attempt.
|
||||
* @category Util
|
||||
* @param {Function} func The function to attempt.
|
||||
* @returns {*} Returns the `func` result or error object.
|
||||
* @example
|
||||
*
|
||||
@@ -20,19 +22,12 @@ var isError = require('../lang/isError');
|
||||
* elements = [];
|
||||
* }
|
||||
*/
|
||||
function attempt() {
|
||||
var func = arguments[0],
|
||||
length = arguments.length,
|
||||
args = Array(length ? length - 1 : 0);
|
||||
|
||||
while (--length > 0) {
|
||||
args[length - 1] = arguments[length];
|
||||
}
|
||||
var attempt = rest(function(func, args) {
|
||||
try {
|
||||
return func.apply(undefined, args);
|
||||
} catch(e) {
|
||||
return apply(func, undefined, args);
|
||||
} catch (e) {
|
||||
return isError(e) ? e : new Error(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = attempt;
|
||||
@@ -1,9 +1,11 @@
|
||||
var toInteger = require('./toInteger');
|
||||
|
||||
/** Used as the `TypeError` message for "Functions" methods. */
|
||||
var FUNC_ERROR_TEXT = 'Expected a function';
|
||||
|
||||
/**
|
||||
* Creates a function that invokes `func`, with the `this` binding and arguments
|
||||
* of the created function, while it is called less than `n` times. Subsequent
|
||||
* of the created function, while it's called less than `n` times. Subsequent
|
||||
* calls to the created function return the result of the last `func` invocation.
|
||||
*
|
||||
* @static
|
||||
@@ -14,25 +16,21 @@ var FUNC_ERROR_TEXT = 'Expected a function';
|
||||
* @returns {Function} Returns the new restricted function.
|
||||
* @example
|
||||
*
|
||||
* jQuery('#add').on('click', _.before(5, addContactToList));
|
||||
* jQuery(element).on('click', _.before(5, addContactToList));
|
||||
* // => allows adding up to 4 contacts to the list
|
||||
*/
|
||||
function before(n, func) {
|
||||
var result;
|
||||
if (typeof func != 'function') {
|
||||
if (typeof n == 'function') {
|
||||
var temp = n;
|
||||
n = func;
|
||||
func = temp;
|
||||
} else {
|
||||
throw new TypeError(FUNC_ERROR_TEXT);
|
||||
}
|
||||
throw new TypeError(FUNC_ERROR_TEXT);
|
||||
}
|
||||
n = toInteger(n);
|
||||
return function() {
|
||||
if (--n > 0) {
|
||||
result = func.apply(this, arguments);
|
||||
} else {
|
||||
func = null;
|
||||
}
|
||||
if (n <= 1) {
|
||||
func = undefined;
|
||||
}
|
||||
return result;
|
||||
};
|
||||
@@ -1,6 +1,6 @@
|
||||
var baseSlice = require('../internal/baseSlice'),
|
||||
createWrapper = require('../internal/createWrapper'),
|
||||
replaceHolders = require('../internal/replaceHolders');
|
||||
var createWrapper = require('./internal/createWrapper'),
|
||||
replaceHolders = require('./internal/replaceHolders'),
|
||||
rest = require('./rest');
|
||||
|
||||
/** Used to compose bitmasks for wrapper metadata. */
|
||||
var BIND_FLAG = 1,
|
||||
@@ -14,7 +14,7 @@ var BIND_FLAG = 1,
|
||||
* The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
|
||||
* may be used as a placeholder for partially applied arguments.
|
||||
*
|
||||
* **Note:** Unlike native `Function#bind` this method does not set the `length`
|
||||
* **Note:** Unlike native `Function#bind` this method doesn't set the "length"
|
||||
* property of bound functions.
|
||||
*
|
||||
* @static
|
||||
@@ -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,18 +41,13 @@ var BIND_FLAG = 1,
|
||||
* bound('hi');
|
||||
* // => 'hi fred!'
|
||||
*/
|
||||
function bind(func, thisArg) {
|
||||
var bind = rest(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 = {};
|
||||
});
|
||||
|
||||
module.exports = bind;
|
||||
39
bindAll.js
Normal file
39
bindAll.js
Normal file
@@ -0,0 +1,39 @@
|
||||
var arrayEach = require('./internal/arrayEach'),
|
||||
baseFlatten = require('./internal/baseFlatten'),
|
||||
bind = require('./bind'),
|
||||
rest = require('./rest');
|
||||
|
||||
/**
|
||||
* Binds methods of an object to the object itself, overwriting the existing
|
||||
* method.
|
||||
*
|
||||
* **Note:** This method doesn't set the "length" property of bound functions.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Util
|
||||
* @param {Object} object The object to bind and assign the bound methods to.
|
||||
* @param {...(string|string[])} methodNames The object method names to bind,
|
||||
* specified individually or in arrays.
|
||||
* @returns {Object} Returns `object`.
|
||||
* @example
|
||||
*
|
||||
* var view = {
|
||||
* 'label': 'docs',
|
||||
* 'onClick': function() {
|
||||
* console.log('clicked ' + this.label);
|
||||
* }
|
||||
* };
|
||||
*
|
||||
* _.bindAll(view, 'onClick');
|
||||
* jQuery(element).on('click', view.onClick);
|
||||
* // => logs 'clicked docs' when clicked
|
||||
*/
|
||||
var bindAll = rest(function(object, methodNames) {
|
||||
arrayEach(baseFlatten(methodNames), function(key) {
|
||||
object[key] = bind(object[key], object);
|
||||
});
|
||||
return object;
|
||||
});
|
||||
|
||||
module.exports = bindAll;
|
||||
@@ -1,6 +1,6 @@
|
||||
var baseSlice = require('../internal/baseSlice'),
|
||||
createWrapper = require('../internal/createWrapper'),
|
||||
replaceHolders = require('../internal/replaceHolders');
|
||||
var createWrapper = require('./internal/createWrapper'),
|
||||
replaceHolders = require('./internal/replaceHolders'),
|
||||
rest = require('./rest');
|
||||
|
||||
/** Used to compose bitmasks for wrapper metadata. */
|
||||
var BIND_FLAG = 1,
|
||||
@@ -13,7 +13,7 @@ var BIND_FLAG = 1,
|
||||
*
|
||||
* This method differs from `_.bind` by allowing bound functions to reference
|
||||
* methods that may be redefined or don't yet exist.
|
||||
* See [Peter Michaux's article](http://michaux.ca/articles/lazy-function-definition-pattern)
|
||||
* See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
|
||||
* for more details.
|
||||
*
|
||||
* The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
|
||||
@@ -22,9 +22,9 @@ var BIND_FLAG = 1,
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Function
|
||||
* @param {Object} object The object the method belongs to.
|
||||
* @param {Object} object The object to invoke the method on.
|
||||
* @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,18 +51,13 @@ var BIND_FLAG = 1,
|
||||
* bound('hi');
|
||||
* // => 'hiya fred!'
|
||||
*/
|
||||
function bindKey(object, key) {
|
||||
var bindKey = rest(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 = {};
|
||||
});
|
||||
|
||||
module.exports = bindKey;
|
||||
@@ -1,8 +1,8 @@
|
||||
var createCompounder = require('../internal/createCompounder');
|
||||
var capitalize = require('./capitalize'),
|
||||
createCompounder = require('./internal/createCompounder');
|
||||
|
||||
/**
|
||||
* Converts `string` to camel case.
|
||||
* See [Wikipedia](https://en.wikipedia.org/wiki/CamelCase) for more details.
|
||||
* Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
@@ -22,7 +22,7 @@ var createCompounder = require('../internal/createCompounder');
|
||||
*/
|
||||
var camelCase = createCompounder(function(result, word, index) {
|
||||
word = word.toLowerCase();
|
||||
return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word);
|
||||
return result + (index ? capitalize(word) : word);
|
||||
});
|
||||
|
||||
module.exports = camelCase;
|
||||
@@ -1,7 +1,9 @@
|
||||
var baseToString = require('../internal/baseToString');
|
||||
var toString = require('./toString'),
|
||||
upperFirst = require('./upperFirst');
|
||||
|
||||
/**
|
||||
* Capitalizes the first character of `string`.
|
||||
* Converts the first character of `string` to upper case and the remaining
|
||||
* to lower case.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
@@ -10,12 +12,11 @@ var baseToString = require('../internal/baseToString');
|
||||
* @returns {string} Returns the capitalized string.
|
||||
* @example
|
||||
*
|
||||
* _.capitalize('fred');
|
||||
* _.capitalize('FRED');
|
||||
* // => 'Fred'
|
||||
*/
|
||||
function capitalize(string) {
|
||||
string = baseToString(string);
|
||||
return string && (string.charAt(0).toUpperCase() + string.slice(1));
|
||||
return upperFirst(toString(string).toLowerCase());
|
||||
}
|
||||
|
||||
module.exports = capitalize;
|
||||
25
ceil.js
Normal file
25
ceil.js
Normal file
@@ -0,0 +1,25 @@
|
||||
var createRound = require('./internal/createRound');
|
||||
|
||||
/**
|
||||
* Computes `number` rounded up to `precision`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Math
|
||||
* @param {number} number The number to round up.
|
||||
* @param {number} [precision=0] The precision to round up to.
|
||||
* @returns {number} Returns the rounded up number.
|
||||
* @example
|
||||
*
|
||||
* _.ceil(4.006);
|
||||
* // => 5
|
||||
*
|
||||
* _.ceil(6.004, 2);
|
||||
* // => 6.01
|
||||
*
|
||||
* _.ceil(6040, -2);
|
||||
* // => 6100
|
||||
*/
|
||||
var ceil = createRound('ceil');
|
||||
|
||||
module.exports = ceil;
|
||||
51
chain.js
51
chain.js
@@ -1,15 +1,36 @@
|
||||
module.exports = {
|
||||
'chain': require('./chain/chain'),
|
||||
'commit': require('./chain/commit'),
|
||||
'lodash': require('./chain/lodash'),
|
||||
'plant': require('./chain/plant'),
|
||||
'reverse': require('./chain/reverse'),
|
||||
'run': require('./chain/run'),
|
||||
'tap': require('./chain/tap'),
|
||||
'thru': require('./chain/thru'),
|
||||
'toJSON': require('./chain/toJSON'),
|
||||
'toString': require('./chain/toString'),
|
||||
'value': require('./chain/value'),
|
||||
'valueOf': require('./chain/valueOf'),
|
||||
'wrapperChain': require('./chain/wrapperChain')
|
||||
};
|
||||
var lodash = require('./wrapperLodash');
|
||||
|
||||
/**
|
||||
* Creates a `lodash` object that wraps `value` with explicit method chaining enabled.
|
||||
* The result of such method chaining must be unwrapped with `_#value`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Seq
|
||||
* @param {*} value The value to wrap.
|
||||
* @returns {Object} Returns the new `lodash` wrapper instance.
|
||||
* @example
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'age': 36 },
|
||||
* { 'user': 'fred', 'age': 40 },
|
||||
* { 'user': 'pebbles', 'age': 1 }
|
||||
* ];
|
||||
*
|
||||
* var youngest = _
|
||||
* .chain(users)
|
||||
* .sortBy('age')
|
||||
* .map(function(o) {
|
||||
* return o.user + ' is ' + o.age;
|
||||
* })
|
||||
* .head()
|
||||
* .value();
|
||||
* // => 'pebbles is 1'
|
||||
*/
|
||||
function chain(value) {
|
||||
var result = lodash(value);
|
||||
result.__chain__ = true;
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = chain;
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
var lodash = require('./lodash');
|
||||
|
||||
/**
|
||||
* Creates a `lodash` object that wraps `value` with explicit method
|
||||
* chaining enabled.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Chain
|
||||
* @param {*} value The value to wrap.
|
||||
* @returns {Object} Returns the new `lodash` wrapper instance.
|
||||
* @example
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'age': 36 },
|
||||
* { 'user': 'fred', 'age': 40 },
|
||||
* { 'user': 'pebbles', 'age': 1 }
|
||||
* ];
|
||||
*
|
||||
* var youngest = _.chain(users)
|
||||
* .sortBy('age')
|
||||
* .map(function(chr) {
|
||||
* return chr.user + ' is ' + chr.age;
|
||||
* })
|
||||
* .first()
|
||||
* .value();
|
||||
* // => 'pebbles is 1'
|
||||
*/
|
||||
function chain(value) {
|
||||
var result = lodash(value);
|
||||
result.__chain__ = true;
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = chain;
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./wrapperCommit');
|
||||
117
chain/lodash.js
117
chain/lodash.js
@@ -1,117 +0,0 @@
|
||||
var LazyWrapper = require('../internal/LazyWrapper'),
|
||||
LodashWrapper = require('../internal/LodashWrapper'),
|
||||
baseLodash = require('../internal/baseLodash'),
|
||||
isArray = require('../lang/isArray'),
|
||||
isObjectLike = require('../internal/isObjectLike'),
|
||||
wrapperClone = require('../internal/wrapperClone');
|
||||
|
||||
/** Used for native method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* Creates a `lodash` object which wraps `value` to enable implicit chaining.
|
||||
* Methods that operate on and return arrays, collections, and functions can
|
||||
* be chained together. Methods that return a boolean or single value will
|
||||
* automatically end the chain returning the unwrapped value. Explicit chaining
|
||||
* may be enabled using `_.chain`. The execution of chained methods is lazy,
|
||||
* that is, execution is deferred until `_#value` is implicitly or explicitly
|
||||
* called.
|
||||
*
|
||||
* Lazy evaluation allows several methods to support shortcut fusion. Shortcut
|
||||
* fusion is an optimization that merges iteratees to avoid creating intermediate
|
||||
* arrays and reduce the number of iteratee executions.
|
||||
*
|
||||
* Chaining is supported in custom builds as long as the `_#value` method is
|
||||
* directly or indirectly included in the build.
|
||||
*
|
||||
* In addition to lodash methods, wrappers also have the following `Array` methods:
|
||||
* `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,
|
||||
* and `unshift`
|
||||
*
|
||||
* The wrapper methods that support shortcut fusion are:
|
||||
* `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`,
|
||||
* `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`,
|
||||
* `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`,
|
||||
* and `where`
|
||||
*
|
||||
* The chainable wrapper methods are:
|
||||
* `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`,
|
||||
* `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`,
|
||||
* `countBy`, `create`, `curry`, `debounce`, `defaults`, `defer`, `delay`,
|
||||
* `difference`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `fill`,
|
||||
* `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`, `forEach`,
|
||||
* `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `functions`,
|
||||
* `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, `invoke`, `keys`,
|
||||
* `keysIn`, `map`, `mapValues`, `matches`, `matchesProperty`, `memoize`, `merge`,
|
||||
* `mixin`, `negate`, `noop`, `omit`, `once`, `pairs`, `partial`, `partialRight`,
|
||||
* `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`,
|
||||
* `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `reverse`,
|
||||
* `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`, `sortByOrder`, `splice`,
|
||||
* `spread`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `tap`,
|
||||
* `throttle`, `thru`, `times`, `toArray`, `toPlainObject`, `transform`,
|
||||
* `union`, `uniq`, `unshift`, `unzip`, `values`, `valuesIn`, `where`,
|
||||
* `without`, `wrap`, `xor`, `zip`, and `zipObject`
|
||||
*
|
||||
* The wrapper methods that are **not** chainable by default are:
|
||||
* `add`, `attempt`, `camelCase`, `capitalize`, `clone`, `cloneDeep`, `deburr`,
|
||||
* `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`,
|
||||
* `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`, `has`,
|
||||
* `identity`, `includes`, `indexOf`, `inRange`, `isArguments`, `isArray`,
|
||||
* `isBoolean`, `isDate`, `isElement`, `isEmpty`, `isEqual`, `isError`,
|
||||
* `isFinite`,`isFunction`, `isMatch`, `isNative`, `isNaN`, `isNull`, `isNumber`,
|
||||
* `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`,
|
||||
* `isTypedArray`, `join`, `kebabCase`, `last`, `lastIndexOf`, `max`, `min`,
|
||||
* `noConflict`, `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`,
|
||||
* `random`, `reduce`, `reduceRight`, `repeat`, `result`, `runInContext`,
|
||||
* `shift`, `size`, `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`,
|
||||
* `startCase`, `startsWith`, `sum`, `template`, `trim`, `trimLeft`,
|
||||
* `trimRight`, `trunc`, `unescape`, `uniqueId`, `value`, and `words`
|
||||
*
|
||||
* The wrapper method `sample` will return a wrapped value when `n` is provided,
|
||||
* otherwise an unwrapped value is returned.
|
||||
*
|
||||
* @name _
|
||||
* @constructor
|
||||
* @category Chain
|
||||
* @param {*} value The value to wrap in a `lodash` instance.
|
||||
* @returns {Object} Returns the new `lodash` wrapper instance.
|
||||
* @example
|
||||
*
|
||||
* var wrapped = _([1, 2, 3]);
|
||||
*
|
||||
* // returns an unwrapped value
|
||||
* wrapped.reduce(function(sum, n) {
|
||||
* return sum + n;
|
||||
* });
|
||||
* // => 6
|
||||
*
|
||||
* // returns a wrapped value
|
||||
* var squares = wrapped.map(function(n) {
|
||||
* return n * n;
|
||||
* });
|
||||
*
|
||||
* _.isArray(squares);
|
||||
* // => false
|
||||
*
|
||||
* _.isArray(squares.value());
|
||||
* // => true
|
||||
*/
|
||||
function lodash(value) {
|
||||
if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
|
||||
if (value instanceof LodashWrapper) {
|
||||
return value;
|
||||
}
|
||||
if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) {
|
||||
return wrapperClone(value);
|
||||
}
|
||||
}
|
||||
return new LodashWrapper(value);
|
||||
}
|
||||
|
||||
// Ensure wrappers are instances of `baseLodash`.
|
||||
lodash.prototype = baseLodash.prototype;
|
||||
|
||||
module.exports = lodash;
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./wrapperPlant');
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./wrapperReverse');
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./wrapperValue');
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./wrapperToString');
|
||||
@@ -1,38 +0,0 @@
|
||||
var LazyWrapper = require('../internal/LazyWrapper'),
|
||||
LodashWrapper = require('../internal/LodashWrapper'),
|
||||
thru = require('./thru');
|
||||
|
||||
/**
|
||||
* Reverses the wrapped array so the first element becomes the last, the
|
||||
* second element becomes the second to last, and so on.
|
||||
*
|
||||
* **Note:** This method mutates the wrapped array.
|
||||
*
|
||||
* @name reverse
|
||||
* @memberOf _
|
||||
* @category Chain
|
||||
* @returns {Object} Returns the new reversed `lodash` wrapper instance.
|
||||
* @example
|
||||
*
|
||||
* var array = [1, 2, 3];
|
||||
*
|
||||
* _(array).reverse().value()
|
||||
* // => [3, 2, 1]
|
||||
*
|
||||
* console.log(array);
|
||||
* // => [3, 2, 1]
|
||||
*/
|
||||
function wrapperReverse() {
|
||||
var value = this.__wrapped__;
|
||||
if (value instanceof LazyWrapper) {
|
||||
if (this.__actions__.length) {
|
||||
value = new LazyWrapper(this);
|
||||
}
|
||||
return new LodashWrapper(value.reverse(), this.__chain__);
|
||||
}
|
||||
return this.thru(function(value) {
|
||||
return value.reverse();
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = wrapperReverse;
|
||||
@@ -1,17 +0,0 @@
|
||||
/**
|
||||
* Produces the result of coercing the unwrapped value to a string.
|
||||
*
|
||||
* @name toString
|
||||
* @memberOf _
|
||||
* @category Chain
|
||||
* @returns {string} Returns the coerced string value.
|
||||
* @example
|
||||
*
|
||||
* _([1, 2, 3]).toString();
|
||||
* // => '1,2,3'
|
||||
*/
|
||||
function wrapperToString() {
|
||||
return (this.value() + '');
|
||||
}
|
||||
|
||||
module.exports = wrapperToString;
|
||||
44
chunk.js
Normal file
44
chunk.js
Normal file
@@ -0,0 +1,44 @@
|
||||
var baseSlice = require('./internal/baseSlice'),
|
||||
toInteger = require('./toInteger');
|
||||
|
||||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||||
var nativeCeil = Math.ceil,
|
||||
nativeMax = Math.max;
|
||||
|
||||
/**
|
||||
* Creates an array of elements split into groups the length of `size`.
|
||||
* If `array` can't be split evenly, the final chunk will be the remaining
|
||||
* elements.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Array
|
||||
* @param {Array} array The array to process.
|
||||
* @param {number} [size=0] The length of each chunk.
|
||||
* @returns {Array} Returns the new array containing chunks.
|
||||
* @example
|
||||
*
|
||||
* _.chunk(['a', 'b', 'c', 'd'], 2);
|
||||
* // => [['a', 'b'], ['c', 'd']]
|
||||
*
|
||||
* _.chunk(['a', 'b', 'c', 'd'], 3);
|
||||
* // => [['a', 'b', 'c'], ['d']]
|
||||
*/
|
||||
function chunk(array, size) {
|
||||
size = nativeMax(toInteger(size), 0);
|
||||
|
||||
var length = array ? array.length : 0;
|
||||
if (!length || size < 1) {
|
||||
return [];
|
||||
}
|
||||
var index = 0,
|
||||
resIndex = -1,
|
||||
result = Array(nativeCeil(length / size));
|
||||
|
||||
while (index < length) {
|
||||
result[++resIndex] = baseSlice(array, index, (index += size));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = chunk;
|
||||
38
clamp.js
Normal file
38
clamp.js
Normal file
@@ -0,0 +1,38 @@
|
||||
var baseClamp = require('./internal/baseClamp'),
|
||||
toNumber = require('./toNumber');
|
||||
|
||||
/**
|
||||
* Clamps `number` within the inclusive `lower` and `upper` bounds.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Number
|
||||
* @param {number} number The number to clamp.
|
||||
* @param {number} [lower] The lower bound.
|
||||
* @param {number} upper The upper bound.
|
||||
* @returns {number} Returns the clamped number.
|
||||
* @example
|
||||
*
|
||||
* _.clamp(-10, -5, 5);
|
||||
* // => -5
|
||||
*
|
||||
* _.clamp(10, -5, 5);
|
||||
* // => 5
|
||||
*/
|
||||
function clamp(number, lower, upper) {
|
||||
if (upper === undefined) {
|
||||
upper = lower;
|
||||
lower = undefined;
|
||||
}
|
||||
if (upper !== undefined) {
|
||||
upper = toNumber(upper);
|
||||
upper = upper === upper ? upper : 0;
|
||||
}
|
||||
if (lower !== undefined) {
|
||||
lower = toNumber(lower);
|
||||
lower = lower === lower ? lower : 0;
|
||||
}
|
||||
return baseClamp(toNumber(number), lower, upper);
|
||||
}
|
||||
|
||||
module.exports = clamp;
|
||||
31
clone.js
Normal file
31
clone.js
Normal file
@@ -0,0 +1,31 @@
|
||||
var baseClone = require('./internal/baseClone');
|
||||
|
||||
/**
|
||||
* Creates a shallow clone of `value`.
|
||||
*
|
||||
* **Note:** This method is loosely based on the
|
||||
* [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
|
||||
* and supports cloning arrays, array buffers, booleans, date objects, maps,
|
||||
* numbers, `Object` objects, regexes, sets, strings, symbols, and typed
|
||||
* arrays. The own enumerable properties of `arguments` objects are cloned
|
||||
* as plain objects. An empty object is returned for uncloneable values such
|
||||
* as error objects, functions, DOM nodes, and WeakMaps.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Lang
|
||||
* @param {*} value The value to clone.
|
||||
* @returns {*} Returns the cloned value.
|
||||
* @example
|
||||
*
|
||||
* var objects = [{ 'a': 1 }, { 'b': 2 }];
|
||||
*
|
||||
* var shallow = _.clone(objects);
|
||||
* console.log(shallow[0] === objects[0]);
|
||||
* // => true
|
||||
*/
|
||||
function clone(value) {
|
||||
return baseClone(value);
|
||||
}
|
||||
|
||||
module.exports = clone;
|
||||
23
cloneDeep.js
Normal file
23
cloneDeep.js
Normal file
@@ -0,0 +1,23 @@
|
||||
var baseClone = require('./internal/baseClone');
|
||||
|
||||
/**
|
||||
* This method is like `_.clone` except that it recursively clones `value`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Lang
|
||||
* @param {*} value The value to recursively clone.
|
||||
* @returns {*} Returns the deep cloned value.
|
||||
* @example
|
||||
*
|
||||
* var objects = [{ 'a': 1 }, { 'b': 2 }];
|
||||
*
|
||||
* var deep = _.cloneDeep(objects);
|
||||
* console.log(deep[0] === objects[0]);
|
||||
* // => false
|
||||
*/
|
||||
function cloneDeep(value) {
|
||||
return baseClone(value, true);
|
||||
}
|
||||
|
||||
module.exports = cloneDeep;
|
||||
33
cloneDeepWith.js
Normal file
33
cloneDeepWith.js
Normal file
@@ -0,0 +1,33 @@
|
||||
var baseClone = require('./internal/baseClone');
|
||||
|
||||
/**
|
||||
* This method is like `_.cloneWith` except that it recursively clones `value`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Lang
|
||||
* @param {*} value The value to recursively clone.
|
||||
* @param {Function} [customizer] The function to customize cloning.
|
||||
* @returns {*} Returns the deep cloned value.
|
||||
* @example
|
||||
*
|
||||
* function customizer(value) {
|
||||
* if (_.isElement(value)) {
|
||||
* return value.cloneNode(true);
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* var el = _.cloneDeep(document.body, customizer);
|
||||
*
|
||||
* console.log(el === document.body);
|
||||
* // => false
|
||||
* console.log(el.nodeName);
|
||||
* // => 'BODY'
|
||||
* console.log(el.childNodes.length);
|
||||
* // => 20
|
||||
*/
|
||||
function cloneDeepWith(value, customizer) {
|
||||
return baseClone(value, true, customizer);
|
||||
}
|
||||
|
||||
module.exports = cloneDeepWith;
|
||||
36
cloneWith.js
Normal file
36
cloneWith.js
Normal file
@@ -0,0 +1,36 @@
|
||||
var baseClone = require('./internal/baseClone');
|
||||
|
||||
/**
|
||||
* This method is like `_.clone` except that it accepts `customizer` which
|
||||
* is invoked to produce the cloned value. If `customizer` returns `undefined`
|
||||
* cloning is handled by the method instead. The `customizer` is invoked with
|
||||
* up to five arguments; (value [, index|key, object, stack]).
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Lang
|
||||
* @param {*} value The value to clone.
|
||||
* @param {Function} [customizer] The function to customize cloning.
|
||||
* @returns {*} Returns the cloned value.
|
||||
* @example
|
||||
*
|
||||
* function customizer(value) {
|
||||
* if (_.isElement(value)) {
|
||||
* return value.cloneNode(false);
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* var el = _.clone(document.body, customizer);
|
||||
*
|
||||
* console.log(el === document.body);
|
||||
* // => false
|
||||
* console.log(el.nodeName);
|
||||
* // => 'BODY'
|
||||
* console.log(el.childNodes.length);
|
||||
* // => 0
|
||||
*/
|
||||
function cloneWith(value, customizer) {
|
||||
return baseClone(value, false, customizer);
|
||||
}
|
||||
|
||||
module.exports = cloneWith;
|
||||
@@ -1,44 +1,28 @@
|
||||
module.exports = {
|
||||
'all': require('./collection/all'),
|
||||
'any': require('./collection/any'),
|
||||
'at': require('./collection/at'),
|
||||
'collect': require('./collection/collect'),
|
||||
'contains': require('./collection/contains'),
|
||||
'countBy': require('./collection/countBy'),
|
||||
'detect': require('./collection/detect'),
|
||||
'each': require('./collection/each'),
|
||||
'eachRight': require('./collection/eachRight'),
|
||||
'every': require('./collection/every'),
|
||||
'filter': require('./collection/filter'),
|
||||
'find': require('./collection/find'),
|
||||
'findLast': require('./collection/findLast'),
|
||||
'findWhere': require('./collection/findWhere'),
|
||||
'foldl': require('./collection/foldl'),
|
||||
'foldr': require('./collection/foldr'),
|
||||
'forEach': require('./collection/forEach'),
|
||||
'forEachRight': require('./collection/forEachRight'),
|
||||
'groupBy': require('./collection/groupBy'),
|
||||
'include': require('./collection/include'),
|
||||
'includes': require('./collection/includes'),
|
||||
'indexBy': require('./collection/indexBy'),
|
||||
'inject': require('./collection/inject'),
|
||||
'invoke': require('./collection/invoke'),
|
||||
'map': require('./collection/map'),
|
||||
'max': require('./math/max'),
|
||||
'min': require('./math/min'),
|
||||
'partition': require('./collection/partition'),
|
||||
'pluck': require('./collection/pluck'),
|
||||
'reduce': require('./collection/reduce'),
|
||||
'reduceRight': require('./collection/reduceRight'),
|
||||
'reject': require('./collection/reject'),
|
||||
'sample': require('./collection/sample'),
|
||||
'select': require('./collection/select'),
|
||||
'shuffle': require('./collection/shuffle'),
|
||||
'size': require('./collection/size'),
|
||||
'some': require('./collection/some'),
|
||||
'sortBy': require('./collection/sortBy'),
|
||||
'sortByAll': require('./collection/sortByAll'),
|
||||
'sortByOrder': require('./collection/sortByOrder'),
|
||||
'sum': require('./math/sum'),
|
||||
'where': require('./collection/where')
|
||||
'at': require('./at'),
|
||||
'countBy': require('./countBy'),
|
||||
'each': require('./each'),
|
||||
'eachRight': require('./eachRight'),
|
||||
'every': require('./every'),
|
||||
'filter': require('./filter'),
|
||||
'find': require('./find'),
|
||||
'findLast': require('./findLast'),
|
||||
'forEach': require('./forEach'),
|
||||
'forEachRight': require('./forEachRight'),
|
||||
'groupBy': require('./groupBy'),
|
||||
'includes': require('./includes'),
|
||||
'invokeMap': require('./invokeMap'),
|
||||
'keyBy': require('./keyBy'),
|
||||
'map': require('./map'),
|
||||
'orderBy': require('./orderBy'),
|
||||
'partition': require('./partition'),
|
||||
'reduce': require('./reduce'),
|
||||
'reduceRight': require('./reduceRight'),
|
||||
'reject': require('./reject'),
|
||||
'sample': require('./sample'),
|
||||
'sampleSize': require('./sampleSize'),
|
||||
'shuffle': require('./shuffle'),
|
||||
'size': require('./size'),
|
||||
'some': require('./some'),
|
||||
'sortBy': require('./sortBy')
|
||||
};
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./every');
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./some');
|
||||
@@ -1,34 +0,0 @@
|
||||
var baseAt = require('../internal/baseAt'),
|
||||
baseFlatten = require('../internal/baseFlatten'),
|
||||
isLength = require('../internal/isLength'),
|
||||
toIterable = require('../internal/toIterable');
|
||||
|
||||
/**
|
||||
* Creates an array of elements corresponding to the given keys, or indexes,
|
||||
* of `collection`. Keys may be specified as individual arguments or as arrays
|
||||
* of keys.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {...(number|number[]|string|string[])} [props] The property names
|
||||
* or indexes of elements to pick, specified individually or in arrays.
|
||||
* @returns {Array} Returns the new array of picked elements.
|
||||
* @example
|
||||
*
|
||||
* _.at(['a', 'b', 'c'], [0, 2]);
|
||||
* // => ['a', 'c']
|
||||
*
|
||||
* _.at(['fred', 'barney', 'pebbles'], 0, 2);
|
||||
* // => ['fred', 'pebbles']
|
||||
*/
|
||||
function at(collection) {
|
||||
var length = collection ? collection.length : 0;
|
||||
if (isLength(length)) {
|
||||
collection = toIterable(collection);
|
||||
}
|
||||
return baseAt(collection, baseFlatten(arguments, false, false, 1));
|
||||
}
|
||||
|
||||
module.exports = at;
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./map');
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./includes');
|
||||
@@ -1,54 +0,0 @@
|
||||
var createAggregator = require('../internal/createAggregator');
|
||||
|
||||
/** Used for native method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* Creates an object composed of keys generated from the results of running
|
||||
* each element of `collection` through `iteratee`. The corresponding value
|
||||
* of each key is the number of times the key was returned by `iteratee`.
|
||||
* The `iteratee` is bound to `thisArg` and invoked with three arguments;
|
||||
* (value, index|key, collection).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {Function|Object|string} [iteratee=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {Object} Returns the composed aggregate object.
|
||||
* @example
|
||||
*
|
||||
* _.countBy([4.3, 6.1, 6.4], function(n) {
|
||||
* return Math.floor(n);
|
||||
* });
|
||||
* // => { '4': 1, '6': 2 }
|
||||
*
|
||||
* _.countBy([4.3, 6.1, 6.4], function(n) {
|
||||
* return this.floor(n);
|
||||
* }, Math);
|
||||
* // => { '4': 1, '6': 2 }
|
||||
*
|
||||
* _.countBy(['one', 'two', 'three'], 'length');
|
||||
* // => { '3': 2, '5': 1 }
|
||||
*/
|
||||
var countBy = createAggregator(function(result, value, key) {
|
||||
hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1);
|
||||
});
|
||||
|
||||
module.exports = countBy;
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./find');
|
||||
@@ -1,62 +0,0 @@
|
||||
var arrayEvery = require('../internal/arrayEvery'),
|
||||
baseCallback = require('../internal/baseCallback'),
|
||||
baseEvery = require('../internal/baseEvery'),
|
||||
isArray = require('../lang/isArray');
|
||||
|
||||
/**
|
||||
* Checks if `predicate` returns truthy for **all** elements of `collection`.
|
||||
* The predicate is bound to `thisArg` and invoked with three arguments;
|
||||
* (value, index|key, collection).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @alias all
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {Function|Object|string} [predicate=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {boolean} Returns `true` if all elements pass the predicate check,
|
||||
* else `false`.
|
||||
* @example
|
||||
*
|
||||
* _.every([true, 1, null, 'yes'], Boolean);
|
||||
* // => false
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'active': false },
|
||||
* { 'user': 'fred', 'active': false }
|
||||
* ];
|
||||
*
|
||||
* // using the `_.matches` callback shorthand
|
||||
* _.every(users, { 'user': 'barney', 'active': false });
|
||||
* // => false
|
||||
*
|
||||
* // using the `_.matchesProperty` callback shorthand
|
||||
* _.every(users, 'active', false);
|
||||
* // => true
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.every(users, 'active');
|
||||
* // => false
|
||||
*/
|
||||
function every(collection, predicate, thisArg) {
|
||||
var func = isArray(collection) ? arrayEvery : baseEvery;
|
||||
if (typeof predicate != 'function' || typeof thisArg != 'undefined') {
|
||||
predicate = baseCallback(predicate, thisArg, 3);
|
||||
}
|
||||
return func(collection, predicate);
|
||||
}
|
||||
|
||||
module.exports = every;
|
||||
@@ -1,61 +0,0 @@
|
||||
var arrayFilter = require('../internal/arrayFilter'),
|
||||
baseCallback = require('../internal/baseCallback'),
|
||||
baseFilter = require('../internal/baseFilter'),
|
||||
isArray = require('../lang/isArray');
|
||||
|
||||
/**
|
||||
* Iterates over elements of `collection`, returning an array of all elements
|
||||
* `predicate` returns truthy for. The predicate is bound to `thisArg` and
|
||||
* invoked with three arguments; (value, index|key, collection).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @alias select
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {Function|Object|string} [predicate=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {Array} Returns the new filtered array.
|
||||
* @example
|
||||
*
|
||||
* _.filter([4, 5, 6], function(n) {
|
||||
* return n % 2 == 0;
|
||||
* });
|
||||
* // => [4, 6]
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'age': 36, 'active': true },
|
||||
* { 'user': 'fred', 'age': 40, 'active': false }
|
||||
* ];
|
||||
*
|
||||
* // using the `_.matches` callback shorthand
|
||||
* _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user');
|
||||
* // => ['barney']
|
||||
*
|
||||
* // using the `_.matchesProperty` callback shorthand
|
||||
* _.pluck(_.filter(users, 'active', false), 'user');
|
||||
* // => ['fred']
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.pluck(_.filter(users, 'active'), 'user');
|
||||
* // => ['barney']
|
||||
*/
|
||||
function filter(collection, predicate, thisArg) {
|
||||
var func = isArray(collection) ? arrayFilter : baseFilter;
|
||||
predicate = baseCallback(predicate, thisArg, 3);
|
||||
return func(collection, predicate);
|
||||
}
|
||||
|
||||
module.exports = filter;
|
||||
@@ -1,66 +0,0 @@
|
||||
var baseCallback = require('../internal/baseCallback'),
|
||||
baseEach = require('../internal/baseEach'),
|
||||
baseFind = require('../internal/baseFind'),
|
||||
findIndex = require('../array/findIndex'),
|
||||
isArray = require('../lang/isArray');
|
||||
|
||||
/**
|
||||
* Iterates over elements of `collection`, returning the first element
|
||||
* `predicate` returns truthy for. The predicate is bound to `thisArg` and
|
||||
* invoked with three arguments; (value, index|key, collection).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @alias detect
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to search.
|
||||
* @param {Function|Object|string} [predicate=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {*} Returns the matched element, else `undefined`.
|
||||
* @example
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'age': 36, 'active': true },
|
||||
* { 'user': 'fred', 'age': 40, 'active': false },
|
||||
* { 'user': 'pebbles', 'age': 1, 'active': true }
|
||||
* ];
|
||||
*
|
||||
* _.result(_.find(users, function(chr) {
|
||||
* return chr.age < 40;
|
||||
* }), 'user');
|
||||
* // => 'barney'
|
||||
*
|
||||
* // using the `_.matches` callback shorthand
|
||||
* _.result(_.find(users, { 'age': 1, 'active': true }), 'user');
|
||||
* // => 'pebbles'
|
||||
*
|
||||
* // using the `_.matchesProperty` callback shorthand
|
||||
* _.result(_.find(users, 'active', false), 'user');
|
||||
* // => 'fred'
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.result(_.find(users, 'active'), 'user');
|
||||
* // => 'barney'
|
||||
*/
|
||||
function find(collection, predicate, thisArg) {
|
||||
if (isArray(collection)) {
|
||||
var index = findIndex(collection, predicate, thisArg);
|
||||
return index > -1 ? collection[index] : undefined;
|
||||
}
|
||||
predicate = baseCallback(predicate, thisArg, 3);
|
||||
return baseFind(collection, predicate, baseEach);
|
||||
}
|
||||
|
||||
module.exports = find;
|
||||
@@ -1,29 +0,0 @@
|
||||
var baseCallback = require('../internal/baseCallback'),
|
||||
baseEachRight = require('../internal/baseEachRight'),
|
||||
baseFind = require('../internal/baseFind');
|
||||
|
||||
/**
|
||||
* This method is like `_.find` except that it iterates over elements of
|
||||
* `collection` from right to left.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to search.
|
||||
* @param {Function|Object|string} [predicate=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {*} Returns the matched element, else `undefined`.
|
||||
* @example
|
||||
*
|
||||
* _.findLast([1, 2, 3, 4], function(n) {
|
||||
* return n % 2 == 1;
|
||||
* });
|
||||
* // => 3
|
||||
*/
|
||||
function findLast(collection, predicate, thisArg) {
|
||||
predicate = baseCallback(predicate, thisArg, 3);
|
||||
return baseFind(collection, predicate, baseEachRight);
|
||||
}
|
||||
|
||||
module.exports = findLast;
|
||||
@@ -1,37 +0,0 @@
|
||||
var baseMatches = require('../internal/baseMatches'),
|
||||
find = require('./find');
|
||||
|
||||
/**
|
||||
* Performs a deep comparison between each element in `collection` and the
|
||||
* source object, returning the first element that has equivalent property
|
||||
* values.
|
||||
*
|
||||
* **Note:** This method supports comparing arrays, booleans, `Date` objects,
|
||||
* numbers, `Object` objects, regexes, and strings. Objects are compared by
|
||||
* their own, not inherited, enumerable properties. For comparing a single
|
||||
* own or inherited property value see `_.matchesProperty`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to search.
|
||||
* @param {Object} source The object of property values to match.
|
||||
* @returns {*} Returns the matched element, else `undefined`.
|
||||
* @example
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'age': 36, 'active': true },
|
||||
* { 'user': 'fred', 'age': 40, 'active': false }
|
||||
* ];
|
||||
*
|
||||
* _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user');
|
||||
* // => 'barney'
|
||||
*
|
||||
* _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user');
|
||||
* // => 'fred'
|
||||
*/
|
||||
function findWhere(collection, source) {
|
||||
return find(collection, baseMatches(source));
|
||||
}
|
||||
|
||||
module.exports = findWhere;
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./reduce');
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./reduceRight');
|
||||
@@ -1,42 +0,0 @@
|
||||
var arrayEach = require('../internal/arrayEach'),
|
||||
baseEach = require('../internal/baseEach'),
|
||||
bindCallback = require('../internal/bindCallback'),
|
||||
isArray = require('../lang/isArray');
|
||||
|
||||
/**
|
||||
* Iterates over elements of `collection` invoking `iteratee` for each element.
|
||||
* The `iteratee` is bound to `thisArg` and invoked with three arguments;
|
||||
* (value, index|key, collection). Iterator functions may exit iteration early
|
||||
* by explicitly returning `false`.
|
||||
*
|
||||
* **Note:** As with other "Collections" methods, objects with a `length` property
|
||||
* are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`
|
||||
* may be used for object iteration.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @alias each
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {Array|Object|string} Returns `collection`.
|
||||
* @example
|
||||
*
|
||||
* _([1, 2]).forEach(function(n) {
|
||||
* console.log(n);
|
||||
* }).value();
|
||||
* // => logs each value from left to right and returns the array
|
||||
*
|
||||
* _.forEach({ 'a': 1, 'b': 2 }, function(n, key) {
|
||||
* console.log(n, key);
|
||||
* });
|
||||
* // => logs each value-key pair and returns the object (iteration order is not guaranteed)
|
||||
*/
|
||||
function forEach(collection, iteratee, thisArg) {
|
||||
return (typeof iteratee == 'function' && typeof thisArg == 'undefined' && isArray(collection))
|
||||
? arrayEach(collection, iteratee)
|
||||
: baseEach(collection, bindCallback(iteratee, thisArg, 3));
|
||||
}
|
||||
|
||||
module.exports = forEach;
|
||||
@@ -1,31 +0,0 @@
|
||||
var arrayEachRight = require('../internal/arrayEachRight'),
|
||||
baseEachRight = require('../internal/baseEachRight'),
|
||||
bindCallback = require('../internal/bindCallback'),
|
||||
isArray = require('../lang/isArray');
|
||||
|
||||
/**
|
||||
* This method is like `_.forEach` except that it iterates over elements of
|
||||
* `collection` from right to left.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @alias eachRight
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {Array|Object|string} Returns `collection`.
|
||||
* @example
|
||||
*
|
||||
* _([1, 2]).forEachRight(function(n) {
|
||||
* console.log(n);
|
||||
* }).join(',');
|
||||
* // => logs each value from right to left and returns the array
|
||||
*/
|
||||
function forEachRight(collection, iteratee, thisArg) {
|
||||
return (typeof iteratee == 'function' && typeof thisArg == 'undefined' && isArray(collection))
|
||||
? arrayEachRight(collection, iteratee)
|
||||
: baseEachRight(collection, bindCallback(iteratee, thisArg, 3));
|
||||
}
|
||||
|
||||
module.exports = forEachRight;
|
||||
@@ -1,59 +0,0 @@
|
||||
var createAggregator = require('../internal/createAggregator');
|
||||
|
||||
/** Used for native method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* Creates an object composed of keys generated from the results of running
|
||||
* each element of `collection` through `iteratee`. The corresponding value
|
||||
* of each key is an array of the elements responsible for generating the key.
|
||||
* The `iteratee` is bound to `thisArg` and invoked with three arguments;
|
||||
* (value, index|key, collection).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {Function|Object|string} [iteratee=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {Object} Returns the composed aggregate object.
|
||||
* @example
|
||||
*
|
||||
* _.groupBy([4.2, 6.1, 6.4], function(n) {
|
||||
* return Math.floor(n);
|
||||
* });
|
||||
* // => { '4': [4.2], '6': [6.1, 6.4] }
|
||||
*
|
||||
* _.groupBy([4.2, 6.1, 6.4], function(n) {
|
||||
* return this.floor(n);
|
||||
* }, Math);
|
||||
* // => { '4': [4.2], '6': [6.1, 6.4] }
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.groupBy(['one', 'two', 'three'], 'length');
|
||||
* // => { '3': ['one', 'two'], '5': ['three'] }
|
||||
*/
|
||||
var groupBy = createAggregator(function(result, value, key) {
|
||||
if (hasOwnProperty.call(result, key)) {
|
||||
result[key].push(value);
|
||||
} else {
|
||||
result[key] = [value];
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = groupBy;
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./includes');
|
||||
@@ -1,61 +0,0 @@
|
||||
var baseIndexOf = require('../internal/baseIndexOf'),
|
||||
isArray = require('../lang/isArray'),
|
||||
isLength = require('../internal/isLength'),
|
||||
isString = require('../lang/isString'),
|
||||
values = require('../object/values');
|
||||
|
||||
/* Native method references for those with the same name as other `lodash` methods. */
|
||||
var nativeMax = Math.max;
|
||||
|
||||
/**
|
||||
* Checks if `value` is in `collection` using `SameValueZero` for equality
|
||||
* comparisons. If `fromIndex` is negative, it is used as the offset from
|
||||
* the end of `collection`.
|
||||
*
|
||||
* **Note:** `SameValueZero` comparisons are like strict equality comparisons,
|
||||
* e.g. `===`, except that `NaN` matches `NaN`. See the
|
||||
* [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
|
||||
* for more details.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @alias contains, include
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to search.
|
||||
* @param {*} target The value to search for.
|
||||
* @param {number} [fromIndex=0] The index to search from.
|
||||
* @returns {boolean} Returns `true` if a matching element is found, else `false`.
|
||||
* @example
|
||||
*
|
||||
* _.includes([1, 2, 3], 1);
|
||||
* // => true
|
||||
*
|
||||
* _.includes([1, 2, 3], 1, 2);
|
||||
* // => false
|
||||
*
|
||||
* _.includes({ 'user': 'fred', 'age': 40 }, 'fred');
|
||||
* // => true
|
||||
*
|
||||
* _.includes('pebbles', 'eb');
|
||||
* // => true
|
||||
*/
|
||||
function includes(collection, target, fromIndex) {
|
||||
var length = collection ? collection.length : 0;
|
||||
if (!isLength(length)) {
|
||||
collection = values(collection);
|
||||
length = collection.length;
|
||||
}
|
||||
if (!length) {
|
||||
return false;
|
||||
}
|
||||
if (typeof fromIndex == 'number') {
|
||||
fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);
|
||||
} else {
|
||||
fromIndex = 0;
|
||||
}
|
||||
return (typeof collection == 'string' || !isArray(collection) && isString(collection))
|
||||
? (fromIndex < length && collection.indexOf(target, fromIndex) > -1)
|
||||
: (baseIndexOf(collection, target, fromIndex) > -1);
|
||||
}
|
||||
|
||||
module.exports = includes;
|
||||
@@ -1,53 +0,0 @@
|
||||
var createAggregator = require('../internal/createAggregator');
|
||||
|
||||
/**
|
||||
* Creates an object composed of keys generated from the results of running
|
||||
* each element of `collection` through `iteratee`. The corresponding value
|
||||
* of each key is the last element responsible for generating the key. The
|
||||
* iteratee function is bound to `thisArg` and invoked with three arguments;
|
||||
* (value, index|key, collection).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {Function|Object|string} [iteratee=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {Object} Returns the composed aggregate object.
|
||||
* @example
|
||||
*
|
||||
* var keyData = [
|
||||
* { 'dir': 'left', 'code': 97 },
|
||||
* { 'dir': 'right', 'code': 100 }
|
||||
* ];
|
||||
*
|
||||
* _.indexBy(keyData, 'dir');
|
||||
* // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
|
||||
*
|
||||
* _.indexBy(keyData, function(object) {
|
||||
* return String.fromCharCode(object.code);
|
||||
* });
|
||||
* // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
|
||||
*
|
||||
* _.indexBy(keyData, function(object) {
|
||||
* return this.fromCharCode(object.code);
|
||||
* }, String);
|
||||
* // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
|
||||
*/
|
||||
var indexBy = createAggregator(function(result, value, key) {
|
||||
result[key] = value;
|
||||
});
|
||||
|
||||
module.exports = indexBy;
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./reduce');
|
||||
@@ -1,30 +0,0 @@
|
||||
var baseInvoke = require('../internal/baseInvoke'),
|
||||
baseSlice = require('../internal/baseSlice');
|
||||
|
||||
/**
|
||||
* Invokes the method named by `methodName` on each element in `collection`,
|
||||
* returning an array of the results of each invoked method. Any additional
|
||||
* arguments are provided to each invoked method. If `methodName` is a function
|
||||
* it is invoked for, and `this` bound to, each element in `collection`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {Function|string} methodName The name of the method to invoke or
|
||||
* the function invoked per iteration.
|
||||
* @param {...*} [args] The arguments to invoke the method with.
|
||||
* @returns {Array} Returns the array of results.
|
||||
* @example
|
||||
*
|
||||
* _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
|
||||
* // => [[1, 5, 7], [1, 2, 3]]
|
||||
*
|
||||
* _.invoke([123, 456], String.prototype.split, '');
|
||||
* // => [['1', '2', '3'], ['4', '5', '6']]
|
||||
*/
|
||||
function invoke(collection, methodName) {
|
||||
return baseInvoke(collection, methodName, baseSlice(arguments, 2));
|
||||
}
|
||||
|
||||
module.exports = invoke;
|
||||
@@ -1,68 +0,0 @@
|
||||
var arrayMap = require('../internal/arrayMap'),
|
||||
baseCallback = require('../internal/baseCallback'),
|
||||
baseMap = require('../internal/baseMap'),
|
||||
isArray = require('../lang/isArray');
|
||||
|
||||
/**
|
||||
* Creates an array of values by running each element in `collection` through
|
||||
* `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three
|
||||
* arguments; (value, index|key, collection).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* Many lodash methods are guarded to work as interatees for methods like
|
||||
* `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
|
||||
*
|
||||
* The guarded methods are:
|
||||
* `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`, `drop`,
|
||||
* `dropRight`, `fill`, `flatten`, `invert`, `max`, `min`, `parseInt`, `slice`,
|
||||
* `sortBy`, `take`, `takeRight`, `template`, `trim`, `trimLeft`, `trimRight`,
|
||||
* `trunc`, `random`, `range`, `sample`, `uniq`, and `words`
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @alias collect
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {Function|Object|string} [iteratee=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* create a `_.property` or `_.matches` style callback respectively.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {Array} Returns the new mapped array.
|
||||
* @example
|
||||
*
|
||||
* function timesThree(n) {
|
||||
* return n * 3;
|
||||
* }
|
||||
*
|
||||
* _.map([1, 2], timesThree);
|
||||
* // => [3, 6]
|
||||
*
|
||||
* _.map({ 'a': 1, 'b': 2 }, timesThree);
|
||||
* // => [3, 6] (iteration order is not guaranteed)
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney' },
|
||||
* { 'user': 'fred' }
|
||||
* ];
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.map(users, 'user');
|
||||
* // => ['barney', 'fred']
|
||||
*/
|
||||
function map(collection, iteratee, thisArg) {
|
||||
var func = isArray(collection) ? arrayMap : baseMap;
|
||||
iteratee = baseCallback(iteratee, thisArg, 3);
|
||||
return func(collection, iteratee);
|
||||
}
|
||||
|
||||
module.exports = map;
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('../math/max');
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('../math/min');
|
||||
@@ -1,66 +0,0 @@
|
||||
var createAggregator = require('../internal/createAggregator');
|
||||
|
||||
/**
|
||||
* Creates an array of elements split into two groups, the first of which
|
||||
* contains elements `predicate` returns truthy for, while the second of which
|
||||
* contains elements `predicate` returns falsey for. The predicate is bound
|
||||
* to `thisArg` and invoked with three arguments; (value, index|key, collection).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {Function|Object|string} [predicate=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {Array} Returns the array of grouped elements.
|
||||
* @example
|
||||
*
|
||||
* _.partition([1, 2, 3], function(n) {
|
||||
* return n % 2;
|
||||
* });
|
||||
* // => [[1, 3], [2]]
|
||||
*
|
||||
* _.partition([1.2, 2.3, 3.4], function(n) {
|
||||
* return this.floor(n) % 2;
|
||||
* }, Math);
|
||||
* // => [[1.2, 3.4], [2.3]]
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'age': 36, 'active': false },
|
||||
* { 'user': 'fred', 'age': 40, 'active': true },
|
||||
* { 'user': 'pebbles', 'age': 1, 'active': false }
|
||||
* ];
|
||||
*
|
||||
* var mapper = function(array) {
|
||||
* return _.pluck(array, 'user');
|
||||
* };
|
||||
*
|
||||
* // using the `_.matches` callback shorthand
|
||||
* _.map(_.partition(users, { 'age': 1, 'active': false }), mapper);
|
||||
* // => [['pebbles'], ['barney', 'fred']]
|
||||
*
|
||||
* // using the `_.matchesProperty` callback shorthand
|
||||
* _.map(_.partition(users, 'active', false), mapper);
|
||||
* // => [['barney', 'pebbles'], ['fred']]
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.map(_.partition(users, 'active'), mapper);
|
||||
* // => [['fred'], ['barney', 'pebbles']]
|
||||
*/
|
||||
var partition = createAggregator(function(result, value, key) {
|
||||
result[key ? 0 : 1].push(value);
|
||||
}, function() { return [[], []]; });
|
||||
|
||||
module.exports = partition;
|
||||
@@ -1,31 +0,0 @@
|
||||
var baseProperty = require('../internal/baseProperty'),
|
||||
map = require('./map');
|
||||
|
||||
/**
|
||||
* Gets the value of `key` from all elements in `collection`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {string} key The key of the property to pluck.
|
||||
* @returns {Array} Returns the property values.
|
||||
* @example
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'age': 36 },
|
||||
* { 'user': 'fred', 'age': 40 }
|
||||
* ];
|
||||
*
|
||||
* _.pluck(users, 'user');
|
||||
* // => ['barney', 'fred']
|
||||
*
|
||||
* var userIndex = _.indexBy(users, 'user');
|
||||
* _.pluck(userIndex, 'age');
|
||||
* // => [36, 40] (iteration order is not guaranteed)
|
||||
*/
|
||||
function pluck(collection, key) {
|
||||
return map(collection, baseProperty(key));
|
||||
}
|
||||
|
||||
module.exports = pluck;
|
||||
@@ -1,48 +0,0 @@
|
||||
var arrayReduce = require('../internal/arrayReduce'),
|
||||
baseCallback = require('../internal/baseCallback'),
|
||||
baseEach = require('../internal/baseEach'),
|
||||
baseReduce = require('../internal/baseReduce'),
|
||||
isArray = require('../lang/isArray');
|
||||
|
||||
/**
|
||||
* Reduces `collection` to a value which is the accumulated result of running
|
||||
* each element in `collection` through `iteratee`, where each successive
|
||||
* invocation is supplied the return value of the previous. If `accumulator`
|
||||
* is not provided the first element of `collection` is used as the initial
|
||||
* value. The `iteratee` is bound to `thisArg`and invoked with four arguments;
|
||||
* (accumulator, value, index|key, collection).
|
||||
*
|
||||
* Many lodash methods are guarded to work as interatees for methods like
|
||||
* `_.reduce`, `_.reduceRight`, and `_.transform`.
|
||||
*
|
||||
* The guarded methods are:
|
||||
* `assign`, `defaults`, `merge`, and `sortAllBy`
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @alias foldl, inject
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||||
* @param {*} [accumulator] The initial value.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {*} Returns the accumulated value.
|
||||
* @example
|
||||
*
|
||||
* _.reduce([1, 2], function(sum, n) {
|
||||
* return sum + n;
|
||||
* });
|
||||
* // => 3
|
||||
*
|
||||
* _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) {
|
||||
* result[key] = n * 3;
|
||||
* return result;
|
||||
* }, {});
|
||||
* // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed)
|
||||
*/
|
||||
function reduce(collection, iteratee, accumulator, thisArg) {
|
||||
var func = isArray(collection) ? arrayReduce : baseReduce;
|
||||
return func(collection, baseCallback(iteratee, thisArg, 4), accumulator, arguments.length < 3, baseEach);
|
||||
}
|
||||
|
||||
module.exports = reduce;
|
||||
@@ -1,61 +0,0 @@
|
||||
var arrayFilter = require('../internal/arrayFilter'),
|
||||
baseCallback = require('../internal/baseCallback'),
|
||||
baseFilter = require('../internal/baseFilter'),
|
||||
isArray = require('../lang/isArray');
|
||||
|
||||
/**
|
||||
* The opposite of `_.filter`; this method returns the elements of `collection`
|
||||
* that `predicate` does **not** return truthy for.
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {Function|Object|string} [predicate=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {Array} Returns the new filtered array.
|
||||
* @example
|
||||
*
|
||||
* _.reject([1, 2, 3, 4], function(n) {
|
||||
* return n % 2 == 0;
|
||||
* });
|
||||
* // => [1, 3]
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'age': 36, 'active': false },
|
||||
* { 'user': 'fred', 'age': 40, 'active': true }
|
||||
* ];
|
||||
*
|
||||
* // using the `_.matches` callback shorthand
|
||||
* _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user');
|
||||
* // => ['barney']
|
||||
*
|
||||
* // using the `_.matchesProperty` callback shorthand
|
||||
* _.pluck(_.reject(users, 'active', false), 'user');
|
||||
* // => ['fred']
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.pluck(_.reject(users, 'active'), 'user');
|
||||
* // => ['barney']
|
||||
*/
|
||||
function reject(collection, predicate, thisArg) {
|
||||
var func = isArray(collection) ? arrayFilter : baseFilter;
|
||||
predicate = baseCallback(predicate, thisArg, 3);
|
||||
return func(collection, function(value, index, collection) {
|
||||
return !predicate(value, index, collection);
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = reject;
|
||||
@@ -1,38 +0,0 @@
|
||||
var baseRandom = require('../internal/baseRandom'),
|
||||
isIterateeCall = require('../internal/isIterateeCall'),
|
||||
shuffle = require('./shuffle'),
|
||||
toIterable = require('../internal/toIterable');
|
||||
|
||||
/* Native method references for those with the same name as other `lodash` methods. */
|
||||
var nativeMin = Math.min;
|
||||
|
||||
/**
|
||||
* Gets a random element or `n` random elements from a collection.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to sample.
|
||||
* @param {number} [n] The number of elements to sample.
|
||||
* @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
|
||||
* @returns {*} Returns the random sample(s).
|
||||
* @example
|
||||
*
|
||||
* _.sample([1, 2, 3, 4]);
|
||||
* // => 2
|
||||
*
|
||||
* _.sample([1, 2, 3, 4], 2);
|
||||
* // => [3, 1]
|
||||
*/
|
||||
function sample(collection, n, guard) {
|
||||
if (guard ? isIterateeCall(collection, n, guard) : n == null) {
|
||||
collection = toIterable(collection);
|
||||
var length = collection.length;
|
||||
return length > 0 ? collection[baseRandom(0, length - 1)] : undefined;
|
||||
}
|
||||
var result = shuffle(collection);
|
||||
result.length = nativeMin(n < 0 ? 0 : (+n || 0), result.length);
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = sample;
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('./filter');
|
||||
@@ -1,36 +0,0 @@
|
||||
var baseRandom = require('../internal/baseRandom'),
|
||||
toIterable = require('../internal/toIterable');
|
||||
|
||||
/**
|
||||
* Creates an array of shuffled values, using a version of the Fisher-Yates
|
||||
* shuffle. See [Wikipedia](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle)
|
||||
* for more details.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to shuffle.
|
||||
* @returns {Array} Returns the new shuffled array.
|
||||
* @example
|
||||
*
|
||||
* _.shuffle([1, 2, 3, 4]);
|
||||
* // => [4, 1, 3, 2]
|
||||
*/
|
||||
function shuffle(collection) {
|
||||
collection = toIterable(collection);
|
||||
|
||||
var index = -1,
|
||||
length = collection.length,
|
||||
result = Array(length);
|
||||
|
||||
while (++index < length) {
|
||||
var rand = baseRandom(0, index);
|
||||
if (index != rand) {
|
||||
result[index] = result[rand];
|
||||
}
|
||||
result[rand] = collection[index];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = shuffle;
|
||||
@@ -1,29 +0,0 @@
|
||||
var isLength = require('../internal/isLength'),
|
||||
keys = require('../object/keys');
|
||||
|
||||
/**
|
||||
* Gets the size of `collection` by returning its length for array-like
|
||||
* values or the number of own enumerable properties for objects.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to inspect.
|
||||
* @returns {number} Returns the size of `collection`.
|
||||
* @example
|
||||
*
|
||||
* _.size([1, 2, 3]);
|
||||
* // => 3
|
||||
*
|
||||
* _.size({ 'a': 1, 'b': 2 });
|
||||
* // => 2
|
||||
*
|
||||
* _.size('pebbles');
|
||||
* // => 7
|
||||
*/
|
||||
function size(collection) {
|
||||
var length = collection ? collection.length : 0;
|
||||
return isLength(length) ? length : keys(collection).length;
|
||||
}
|
||||
|
||||
module.exports = size;
|
||||
@@ -1,63 +0,0 @@
|
||||
var arraySome = require('../internal/arraySome'),
|
||||
baseCallback = require('../internal/baseCallback'),
|
||||
baseSome = require('../internal/baseSome'),
|
||||
isArray = require('../lang/isArray');
|
||||
|
||||
/**
|
||||
* Checks if `predicate` returns truthy for **any** element of `collection`.
|
||||
* The function returns as soon as it finds a passing value and does not iterate
|
||||
* over the entire collection. The predicate is bound to `thisArg` and invoked
|
||||
* with three arguments; (value, index|key, collection).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @alias any
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {Function|Object|string} [predicate=_.identity] The function invoked
|
||||
* per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {boolean} Returns `true` if any element passes the predicate check,
|
||||
* else `false`.
|
||||
* @example
|
||||
*
|
||||
* _.some([null, 0, 'yes', false], Boolean);
|
||||
* // => true
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'active': true },
|
||||
* { 'user': 'fred', 'active': false }
|
||||
* ];
|
||||
*
|
||||
* // using the `_.matches` callback shorthand
|
||||
* _.some(users, { 'user': 'barney', 'active': false });
|
||||
* // => false
|
||||
*
|
||||
* // using the `_.matchesProperty` callback shorthand
|
||||
* _.some(users, 'active', false);
|
||||
* // => true
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.some(users, 'active');
|
||||
* // => true
|
||||
*/
|
||||
function some(collection, predicate, thisArg) {
|
||||
var func = isArray(collection) ? arraySome : baseSome;
|
||||
if (typeof predicate != 'function' || typeof thisArg != 'undefined') {
|
||||
predicate = baseCallback(predicate, thisArg, 3);
|
||||
}
|
||||
return func(collection, predicate);
|
||||
}
|
||||
|
||||
module.exports = some;
|
||||
@@ -1,75 +0,0 @@
|
||||
var baseCallback = require('../internal/baseCallback'),
|
||||
baseEach = require('../internal/baseEach'),
|
||||
baseSortBy = require('../internal/baseSortBy'),
|
||||
compareAscending = require('../internal/compareAscending'),
|
||||
isIterateeCall = require('../internal/isIterateeCall'),
|
||||
isLength = require('../internal/isLength');
|
||||
|
||||
/**
|
||||
* Creates an array of elements, sorted in ascending order by the results of
|
||||
* running each element in a collection through `iteratee`. This method performs
|
||||
* a stable sort, that is, it preserves the original sort order of equal elements.
|
||||
* The `iteratee` is bound to `thisArg` and invoked with three arguments;
|
||||
* (value, index|key, collection).
|
||||
*
|
||||
* If a property name is provided for `predicate` the created `_.property`
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
||||
* style callback returns `true` for elements that have a matching property
|
||||
* value, else `false`.
|
||||
*
|
||||
* If an object is provided for `predicate` the created `_.matches` style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {Array|Function|Object|string} [iteratee=_.identity] The function
|
||||
* invoked per iteration. If a property name or an object is provided it is
|
||||
* used to create a `_.property` or `_.matches` style callback respectively.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {Array} Returns the new sorted array.
|
||||
* @example
|
||||
*
|
||||
* _.sortBy([1, 2, 3], function(n) {
|
||||
* return Math.sin(n);
|
||||
* });
|
||||
* // => [3, 1, 2]
|
||||
*
|
||||
* _.sortBy([1, 2, 3], function(n) {
|
||||
* return this.sin(n);
|
||||
* }, Math);
|
||||
* // => [3, 1, 2]
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'fred' },
|
||||
* { 'user': 'pebbles' },
|
||||
* { 'user': 'barney' }
|
||||
* ];
|
||||
*
|
||||
* // using the `_.property` callback shorthand
|
||||
* _.pluck(_.sortBy(users, 'user'), 'user');
|
||||
* // => ['barney', 'fred', 'pebbles']
|
||||
*/
|
||||
function sortBy(collection, iteratee, thisArg) {
|
||||
if (collection == null) {
|
||||
return [];
|
||||
}
|
||||
var index = -1,
|
||||
length = collection.length,
|
||||
result = isLength(length) ? Array(length) : [];
|
||||
|
||||
if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
|
||||
iteratee = null;
|
||||
}
|
||||
iteratee = baseCallback(iteratee, thisArg, 3);
|
||||
baseEach(collection, function(value, key, collection) {
|
||||
result[++index] = { 'criteria': iteratee(value, key, collection), 'index': index, 'value': value };
|
||||
});
|
||||
return baseSortBy(result, compareAscending);
|
||||
}
|
||||
|
||||
module.exports = sortBy;
|
||||
@@ -1,41 +0,0 @@
|
||||
var baseFlatten = require('../internal/baseFlatten'),
|
||||
baseSortByOrder = require('../internal/baseSortByOrder'),
|
||||
isIterateeCall = require('../internal/isIterateeCall');
|
||||
|
||||
/**
|
||||
* This method is like `_.sortBy` except that it sorts by property names
|
||||
* instead of an iteratee function.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {...(string|string[])} props The property names to sort by,
|
||||
* specified as individual property names or arrays of property names.
|
||||
* @returns {Array} Returns the new sorted array.
|
||||
* @example
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'age': 36 },
|
||||
* { 'user': 'fred', 'age': 40 },
|
||||
* { 'user': 'barney', 'age': 26 },
|
||||
* { 'user': 'fred', 'age': 30 }
|
||||
* ];
|
||||
*
|
||||
* _.map(_.sortByAll(users, ['user', 'age']), _.values);
|
||||
* // => [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]]
|
||||
*/
|
||||
function sortByAll(collection) {
|
||||
if (collection == null) {
|
||||
return [];
|
||||
}
|
||||
var args = arguments,
|
||||
guard = args[3];
|
||||
|
||||
if (guard && isIterateeCall(args[1], args[2], guard)) {
|
||||
args = [collection, args[1]];
|
||||
}
|
||||
return baseSortByOrder(collection, baseFlatten(args, false, false, 1), []);
|
||||
}
|
||||
|
||||
module.exports = sortByAll;
|
||||
@@ -1,47 +0,0 @@
|
||||
var baseSortByOrder = require('../internal/baseSortByOrder'),
|
||||
isArray = require('../lang/isArray'),
|
||||
isIterateeCall = require('../internal/isIterateeCall');
|
||||
|
||||
/**
|
||||
* This method is like `_.sortByAll` except that it allows specifying the
|
||||
* sort orders of the property names to sort by. A truthy value in `orders`
|
||||
* will sort the corresponding property name in ascending order while a
|
||||
* falsey value will sort it in descending order.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Collection
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {string[]} props The property names to sort by.
|
||||
* @param {boolean[]} orders The sort orders of `props`.
|
||||
* @returns {Array} Returns the new sorted array.
|
||||
* @example
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'age': 36 },
|
||||
* { 'user': 'fred', 'age': 40 },
|
||||
* { 'user': 'barney', 'age': 26 },
|
||||
* { 'user': 'fred', 'age': 30 }
|
||||
* ];
|
||||
*
|
||||
* // sort by `user` in ascending order and by `age` in descending order
|
||||
* _.map(_.sortByOrder(users, ['user', 'age'], [true, false]), _.values);
|
||||
* // => [['barney', 36], ['barney', 26], ['fred', 40], ['fred', 30]]
|
||||
*/
|
||||
function sortByOrder(collection, props, orders, guard) {
|
||||
if (collection == null) {
|
||||
return [];
|
||||
}
|
||||
if (guard && isIterateeCall(props, orders, guard)) {
|
||||
orders = null;
|
||||
}
|
||||
if (!isArray(props)) {
|
||||
props = props == null ? [] : [props];
|
||||
}
|
||||
if (!isArray(orders)) {
|
||||
orders = orders == null ? [] : [orders];
|
||||
}
|
||||
return baseSortByOrder(collection, props, orders);
|
||||
}
|
||||
|
||||
module.exports = sortByOrder;
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('../math/sum');
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user