lodash-rails 3.5.0 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/lodash/rails/version.rb +1 -1
- data/vendor/assets/javascripts/lodash.compat.js +1003 -800
- data/vendor/assets/javascripts/lodash.compat.min.js +89 -88
- data/vendor/assets/javascripts/lodash.js +1000 -796
- data/vendor/assets/javascripts/lodash.min.js +85 -85
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 369716b2bb1fae0f2112697dd79b425bbfee483f
|
4
|
+
data.tar.gz: 4901ab398ff33011c875760f03a3b9d7267378a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ba51e2184c6dbfc56d7e97e3ac4af1f50b8bfeda62d848c82f1650fb52e03db5bb68c8b43d153c54bcec3866c4ff8d9e4236ef819cd8b816b3d6dfe7ab0b5ab
|
7
|
+
data.tar.gz: bbaf1d78b8a5881f48eeb6c9748ed6be68da48d7b90913baf2c64f7c95adf0b528dcc5181f462f611c3442a817d28a883476012bdef9fbc05893682c69e55162
|
data/README.md
CHANGED
data/lib/lodash/rails/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/**
|
2
2
|
* @license
|
3
|
-
* lodash 3.
|
3
|
+
* lodash 3.6.0 (Custom Build) <https://lodash.com/>
|
4
4
|
* Build: `lodash compat -o ./lodash.js`
|
5
5
|
* Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
|
6
6
|
* Based on Underscore.js 1.8.2 <http://underscorejs.org/LICENSE>
|
@@ -13,7 +13,7 @@
|
|
13
13
|
var undefined;
|
14
14
|
|
15
15
|
/** Used as the semantic version number. */
|
16
|
-
var VERSION = '3.
|
16
|
+
var VERSION = '3.6.0';
|
17
17
|
|
18
18
|
/** Used to compose bitmasks for wrapper metadata. */
|
19
19
|
var BIND_FLAG = 1,
|
@@ -23,8 +23,8 @@
|
|
23
23
|
CURRY_RIGHT_FLAG = 16,
|
24
24
|
PARTIAL_FLAG = 32,
|
25
25
|
PARTIAL_RIGHT_FLAG = 64,
|
26
|
-
|
27
|
-
|
26
|
+
ARY_FLAG = 128,
|
27
|
+
REARG_FLAG = 256;
|
28
28
|
|
29
29
|
/** Used as default options for `_.trunc`. */
|
30
30
|
var DEFAULT_TRUNC_LENGTH = 30,
|
@@ -88,18 +88,18 @@
|
|
88
88
|
reInterpolate = /<%=([\s\S]+?)%>/g;
|
89
89
|
|
90
90
|
/**
|
91
|
-
* Used to match
|
92
|
-
|
93
|
-
|
91
|
+
* Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
|
92
|
+
*/
|
93
|
+
var reComboMarks = /[\u0300-\u036f\ufe20-\ufe23]/g;
|
94
|
+
|
95
|
+
/**
|
96
|
+
* Used to match [ES template delimiters](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-template-literal-lexical-components).
|
94
97
|
*/
|
95
98
|
var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
|
96
99
|
|
97
100
|
/** Used to match `RegExp` flags from their coerced string values. */
|
98
101
|
var reFlags = /\w*$/;
|
99
102
|
|
100
|
-
/** Used to detect named functions. */
|
101
|
-
var reFuncName = /^\s*function[ \n\r\t]+\w/;
|
102
|
-
|
103
103
|
/** Used to detect hexadecimal string values. */
|
104
104
|
var reHexPrefix = /^0[xX]/;
|
105
105
|
|
@@ -113,16 +113,13 @@
|
|
113
113
|
var reNoMatch = /($^)/;
|
114
114
|
|
115
115
|
/**
|
116
|
-
* Used to match `RegExp` special characters.
|
117
|
-
*
|
118
|
-
*
|
116
|
+
* Used to match `RegExp` [special characters](http://www.regular-expressions.info/characters.html#special).
|
117
|
+
* In addition to special characters the forward slash is escaped to allow for
|
118
|
+
* easier `eval` use and `Function` compilation.
|
119
119
|
*/
|
120
120
|
var reRegExpChars = /[.*+?^${}()|[\]\/\\]/g,
|
121
121
|
reHasRegExpChars = RegExp(reRegExpChars.source);
|
122
122
|
|
123
|
-
/** Used to detect functions containing a `this` reference. */
|
124
|
-
var reThis = /\bthis\b/;
|
125
|
-
|
126
123
|
/** Used to match unescaped characters in compiled string literals. */
|
127
124
|
var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
|
128
125
|
|
@@ -153,7 +150,7 @@
|
|
153
150
|
'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'document',
|
154
151
|
'isFinite', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array',
|
155
152
|
'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
|
156
|
-
'window'
|
153
|
+
'window'
|
157
154
|
];
|
158
155
|
|
159
156
|
/** Used to fix the JScript `[[DontEnum]]` bug. */
|
@@ -268,8 +265,11 @@
|
|
268
265
|
/** Detect free variable `global` from Node.js. */
|
269
266
|
var freeGlobal = freeExports && freeModule && typeof global == 'object' && global;
|
270
267
|
|
268
|
+
/** Detect free variable `self`. */
|
269
|
+
var freeSelf = objectTypes[typeof self] && self && self.Object && self;
|
270
|
+
|
271
271
|
/** Detect free variable `window`. */
|
272
|
-
var freeWindow = objectTypes[typeof window] && window;
|
272
|
+
var freeWindow = objectTypes[typeof window] && window && window.Object && window;
|
273
273
|
|
274
274
|
/** Detect the popular CommonJS extension `module.exports`. */
|
275
275
|
var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;
|
@@ -280,7 +280,7 @@
|
|
280
280
|
* The `this` value is used if it is the global object to avoid Greasemonkey's
|
281
281
|
* restricted `window` object, otherwise the `window` object is used.
|
282
282
|
*/
|
283
|
-
var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || this;
|
283
|
+
var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;
|
284
284
|
|
285
285
|
/*--------------------------------------------------------------------------*/
|
286
286
|
|
@@ -308,6 +308,28 @@
|
|
308
308
|
return 0;
|
309
309
|
}
|
310
310
|
|
311
|
+
/**
|
312
|
+
* The base implementation of `_.findIndex` and `_.findLastIndex` without
|
313
|
+
* support for callback shorthands and `this` binding.
|
314
|
+
*
|
315
|
+
* @private
|
316
|
+
* @param {Array} array The array to search.
|
317
|
+
* @param {Function} predicate The function invoked per iteration.
|
318
|
+
* @param {boolean} [fromRight] Specify iterating from right to left.
|
319
|
+
* @returns {number} Returns the index of the matched value, else `-1`.
|
320
|
+
*/
|
321
|
+
function baseFindIndex(array, predicate, fromRight) {
|
322
|
+
var length = array.length,
|
323
|
+
index = fromRight ? length : -1;
|
324
|
+
|
325
|
+
while ((fromRight ? index-- : ++index < length)) {
|
326
|
+
if (predicate(array[index], index, array)) {
|
327
|
+
return index;
|
328
|
+
}
|
329
|
+
}
|
330
|
+
return -1;
|
331
|
+
}
|
332
|
+
|
311
333
|
/**
|
312
334
|
* The base implementation of `_.indexOf` without support for binary searches.
|
313
335
|
*
|
@@ -494,7 +516,6 @@
|
|
494
516
|
|
495
517
|
/**
|
496
518
|
* Gets the index at which the first occurrence of `NaN` is found in `array`.
|
497
|
-
* If `fromRight` is provided elements of `array` are iterated from right to left.
|
498
519
|
*
|
499
520
|
* @private
|
500
521
|
* @param {Array} array The array to search.
|
@@ -543,7 +564,7 @@
|
|
543
564
|
* @returns {boolean} Returns `true` if `value` is object-like, else `false`.
|
544
565
|
*/
|
545
566
|
function isObjectLike(value) {
|
546
|
-
return
|
567
|
+
return !!value && typeof value == 'object';
|
547
568
|
}
|
548
569
|
|
549
570
|
/**
|
@@ -665,19 +686,19 @@
|
|
665
686
|
* @returns {Function} Returns a new `lodash` function.
|
666
687
|
* @example
|
667
688
|
*
|
668
|
-
* _.mixin({ '
|
689
|
+
* _.mixin({ 'foo': _.constant('foo') });
|
669
690
|
*
|
670
691
|
* var lodash = _.runInContext();
|
671
|
-
* lodash.mixin({ '
|
692
|
+
* lodash.mixin({ 'bar': lodash.constant('bar') });
|
672
693
|
*
|
673
|
-
* _.isFunction(_.
|
694
|
+
* _.isFunction(_.foo);
|
674
695
|
* // => true
|
675
|
-
* _.isFunction(_.
|
696
|
+
* _.isFunction(_.bar);
|
676
697
|
* // => false
|
677
698
|
*
|
678
|
-
* lodash.isFunction(lodash.
|
699
|
+
* lodash.isFunction(lodash.foo);
|
679
700
|
* // => false
|
680
|
-
* lodash.isFunction(lodash.
|
701
|
+
* lodash.isFunction(lodash.bar);
|
681
702
|
* // => true
|
682
703
|
*
|
683
704
|
* // using `context` to mock `Date#getTime` use in `_.now`
|
@@ -731,9 +752,8 @@
|
|
731
752
|
var idCounter = 0;
|
732
753
|
|
733
754
|
/**
|
734
|
-
* Used to resolve the `toStringTag`
|
735
|
-
*
|
736
|
-
* for more details.
|
755
|
+
* Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)
|
756
|
+
* of values.
|
737
757
|
*/
|
738
758
|
var objToString = objectProto.toString;
|
739
759
|
|
@@ -798,15 +818,17 @@
|
|
798
818
|
var FLOAT64_BYTES_PER_ELEMENT = Float64Array ? Float64Array.BYTES_PER_ELEMENT : 0;
|
799
819
|
|
800
820
|
/**
|
801
|
-
* Used as the maximum length
|
802
|
-
*
|
803
|
-
* for more details.
|
821
|
+
* Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)
|
822
|
+
* of an array-like value.
|
804
823
|
*/
|
805
824
|
var MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;
|
806
825
|
|
807
826
|
/** Used to store function metadata. */
|
808
827
|
var metaMap = WeakMap && new WeakMap;
|
809
828
|
|
829
|
+
/** Used to lookup unminified function names. */
|
830
|
+
var realNames = {};
|
831
|
+
|
810
832
|
/** Used to lookup a type array constructors by `toStringTag`. */
|
811
833
|
var ctorByTag = {};
|
812
834
|
ctorByTag[float32Tag] = context.Float32Array;
|
@@ -1022,7 +1044,7 @@
|
|
1022
1044
|
* @memberOf _.support
|
1023
1045
|
* @type boolean
|
1024
1046
|
*/
|
1025
|
-
support.funcDecomp =
|
1047
|
+
support.funcDecomp = /\bthis\b/.test(function() { return this; });
|
1026
1048
|
|
1027
1049
|
/**
|
1028
1050
|
* Detect if `Function#name` is supported (all but IE).
|
@@ -1461,7 +1483,7 @@
|
|
1461
1483
|
|
1462
1484
|
/**
|
1463
1485
|
* A specialized version of `_.forEach` for arrays without support for callback
|
1464
|
-
* shorthands
|
1486
|
+
* shorthands and `this` binding.
|
1465
1487
|
*
|
1466
1488
|
* @private
|
1467
1489
|
* @param {Array} array The array to iterate over.
|
@@ -1482,7 +1504,7 @@
|
|
1482
1504
|
|
1483
1505
|
/**
|
1484
1506
|
* A specialized version of `_.forEachRight` for arrays without support for
|
1485
|
-
* callback shorthands
|
1507
|
+
* callback shorthands and `this` binding.
|
1486
1508
|
*
|
1487
1509
|
* @private
|
1488
1510
|
* @param {Array} array The array to iterate over.
|
@@ -1502,7 +1524,7 @@
|
|
1502
1524
|
|
1503
1525
|
/**
|
1504
1526
|
* A specialized version of `_.every` for arrays without support for callback
|
1505
|
-
* shorthands
|
1527
|
+
* shorthands and `this` binding.
|
1506
1528
|
*
|
1507
1529
|
* @private
|
1508
1530
|
* @param {Array} array The array to iterate over.
|
@@ -1524,7 +1546,7 @@
|
|
1524
1546
|
|
1525
1547
|
/**
|
1526
1548
|
* A specialized version of `_.filter` for arrays without support for callback
|
1527
|
-
* shorthands
|
1549
|
+
* shorthands and `this` binding.
|
1528
1550
|
*
|
1529
1551
|
* @private
|
1530
1552
|
* @param {Array} array The array to iterate over.
|
@@ -1548,7 +1570,7 @@
|
|
1548
1570
|
|
1549
1571
|
/**
|
1550
1572
|
* A specialized version of `_.map` for arrays without support for callback
|
1551
|
-
* shorthands
|
1573
|
+
* shorthands and `this` binding.
|
1552
1574
|
*
|
1553
1575
|
* @private
|
1554
1576
|
* @param {Array} array The array to iterate over.
|
@@ -1610,7 +1632,7 @@
|
|
1610
1632
|
|
1611
1633
|
/**
|
1612
1634
|
* A specialized version of `_.reduce` for arrays without support for callback
|
1613
|
-
* shorthands
|
1635
|
+
* shorthands and `this` binding.
|
1614
1636
|
*
|
1615
1637
|
* @private
|
1616
1638
|
* @param {Array} array The array to iterate over.
|
@@ -1635,7 +1657,7 @@
|
|
1635
1657
|
|
1636
1658
|
/**
|
1637
1659
|
* A specialized version of `_.reduceRight` for arrays without support for
|
1638
|
-
* callback shorthands
|
1660
|
+
* callback shorthands and `this` binding.
|
1639
1661
|
*
|
1640
1662
|
* @private
|
1641
1663
|
* @param {Array} array The array to iterate over.
|
@@ -1658,7 +1680,7 @@
|
|
1658
1680
|
|
1659
1681
|
/**
|
1660
1682
|
* A specialized version of `_.some` for arrays without support for callback
|
1661
|
-
* shorthands
|
1683
|
+
* shorthands and `this` binding.
|
1662
1684
|
*
|
1663
1685
|
* @private
|
1664
1686
|
* @param {Array} array The array to iterate over.
|
@@ -1678,6 +1700,23 @@
|
|
1678
1700
|
return false;
|
1679
1701
|
}
|
1680
1702
|
|
1703
|
+
/**
|
1704
|
+
* A specialized version of `_.sum` for arrays without support for iteratees.
|
1705
|
+
*
|
1706
|
+
* @private
|
1707
|
+
* @param {Array} array The array to iterate over.
|
1708
|
+
* @returns {number} Returns the sum.
|
1709
|
+
*/
|
1710
|
+
function arraySum(array) {
|
1711
|
+
var length = array.length,
|
1712
|
+
result = 0;
|
1713
|
+
|
1714
|
+
while (length--) {
|
1715
|
+
result += +array[length] || 0;
|
1716
|
+
}
|
1717
|
+
return result;
|
1718
|
+
}
|
1719
|
+
|
1681
1720
|
/**
|
1682
1721
|
* Used by `_.defaults` to customize its `_.assign` use.
|
1683
1722
|
*
|
@@ -1792,26 +1831,6 @@
|
|
1792
1831
|
return object;
|
1793
1832
|
}
|
1794
1833
|
|
1795
|
-
/**
|
1796
|
-
* The base implementation of `_.bindAll` without support for individual
|
1797
|
-
* method name arguments.
|
1798
|
-
*
|
1799
|
-
* @private
|
1800
|
-
* @param {Object} object The object to bind and assign the bound methods to.
|
1801
|
-
* @param {string[]} methodNames The object method names to bind.
|
1802
|
-
* @returns {Object} Returns `object`.
|
1803
|
-
*/
|
1804
|
-
function baseBindAll(object, methodNames) {
|
1805
|
-
var index = -1,
|
1806
|
-
length = methodNames.length;
|
1807
|
-
|
1808
|
-
while (++index < length) {
|
1809
|
-
var key = methodNames[index];
|
1810
|
-
object[key] = createWrapper(object[key], BIND_FLAG, object);
|
1811
|
-
}
|
1812
|
-
return object;
|
1813
|
-
}
|
1814
|
-
|
1815
1834
|
/**
|
1816
1835
|
* The base implementation of `_.callback` which supports specifying the
|
1817
1836
|
* number of arguments to provide to `func`.
|
@@ -1825,9 +1844,9 @@
|
|
1825
1844
|
function baseCallback(func, thisArg, argCount) {
|
1826
1845
|
var type = typeof func;
|
1827
1846
|
if (type == 'function') {
|
1828
|
-
return
|
1829
|
-
?
|
1830
|
-
: func;
|
1847
|
+
return typeof thisArg == 'undefined'
|
1848
|
+
? func
|
1849
|
+
: bindCallback(func, thisArg, argCount);
|
1831
1850
|
}
|
1832
1851
|
if (func == null) {
|
1833
1852
|
return identity;
|
@@ -1937,14 +1956,14 @@
|
|
1937
1956
|
* @private
|
1938
1957
|
* @param {Function} func The function to delay.
|
1939
1958
|
* @param {number} wait The number of milliseconds to delay invocation.
|
1940
|
-
* @param {Object} args The
|
1959
|
+
* @param {Object} args The arguments provide to `func`.
|
1941
1960
|
* @returns {number} Returns the timer id.
|
1942
1961
|
*/
|
1943
|
-
function baseDelay(func, wait, args
|
1962
|
+
function baseDelay(func, wait, args) {
|
1944
1963
|
if (typeof func != 'function') {
|
1945
1964
|
throw new TypeError(FUNC_ERROR_TEXT);
|
1946
1965
|
}
|
1947
|
-
return setTimeout(function() { func.apply(undefined,
|
1966
|
+
return setTimeout(function() { func.apply(undefined, args); }, wait);
|
1948
1967
|
}
|
1949
1968
|
|
1950
1969
|
/**
|
@@ -2003,21 +2022,7 @@
|
|
2003
2022
|
* @param {Function} iteratee The function invoked per iteration.
|
2004
2023
|
* @returns {Array|Object|string} Returns `collection`.
|
2005
2024
|
*/
|
2006
|
-
|
2007
|
-
var length = collection ? collection.length : 0;
|
2008
|
-
if (!isLength(length)) {
|
2009
|
-
return baseForOwn(collection, iteratee);
|
2010
|
-
}
|
2011
|
-
var index = -1,
|
2012
|
-
iterable = toObject(collection);
|
2013
|
-
|
2014
|
-
while (++index < length) {
|
2015
|
-
if (iteratee(iterable[index], index, iterable) === false) {
|
2016
|
-
break;
|
2017
|
-
}
|
2018
|
-
}
|
2019
|
-
return collection;
|
2020
|
-
}
|
2025
|
+
var baseEach = createBaseEach(baseForOwn);
|
2021
2026
|
|
2022
2027
|
/**
|
2023
2028
|
* The base implementation of `_.forEachRight` without support for callback
|
@@ -2028,23 +2033,11 @@
|
|
2028
2033
|
* @param {Function} iteratee The function invoked per iteration.
|
2029
2034
|
* @returns {Array|Object|string} Returns `collection`.
|
2030
2035
|
*/
|
2031
|
-
|
2032
|
-
var length = collection ? collection.length : 0;
|
2033
|
-
if (!isLength(length)) {
|
2034
|
-
return baseForOwnRight(collection, iteratee);
|
2035
|
-
}
|
2036
|
-
var iterable = toObject(collection);
|
2037
|
-
while (length--) {
|
2038
|
-
if (iteratee(iterable[length], length, iterable) === false) {
|
2039
|
-
break;
|
2040
|
-
}
|
2041
|
-
}
|
2042
|
-
return collection;
|
2043
|
-
}
|
2036
|
+
var baseEachRight = createBaseEach(baseForOwnRight, true);
|
2044
2037
|
|
2045
2038
|
/**
|
2046
2039
|
* The base implementation of `_.every` without support for callback
|
2047
|
-
* shorthands
|
2040
|
+
* shorthands and `this` binding.
|
2048
2041
|
*
|
2049
2042
|
* @private
|
2050
2043
|
* @param {Array|Object|string} collection The collection to iterate over.
|
@@ -2093,7 +2086,7 @@
|
|
2093
2086
|
|
2094
2087
|
/**
|
2095
2088
|
* The base implementation of `_.filter` without support for callback
|
2096
|
-
* shorthands
|
2089
|
+
* shorthands and `this` binding.
|
2097
2090
|
*
|
2098
2091
|
* @private
|
2099
2092
|
* @param {Array|Object|string} collection The collection to iterate over.
|
@@ -2142,11 +2135,10 @@
|
|
2142
2135
|
* @param {Array} array The array to flatten.
|
2143
2136
|
* @param {boolean} isDeep Specify a deep flatten.
|
2144
2137
|
* @param {boolean} isStrict Restrict flattening to arrays and `arguments` objects.
|
2145
|
-
* @param {number} fromIndex The index to start from.
|
2146
2138
|
* @returns {Array} Returns the new flattened array.
|
2147
2139
|
*/
|
2148
|
-
function baseFlatten(array, isDeep, isStrict
|
2149
|
-
var index =
|
2140
|
+
function baseFlatten(array, isDeep, isStrict) {
|
2141
|
+
var index = -1,
|
2150
2142
|
length = array.length,
|
2151
2143
|
resIndex = -1,
|
2152
2144
|
result = [];
|
@@ -2157,7 +2149,7 @@
|
|
2157
2149
|
if (isObjectLike(value) && isLength(value.length) && (isArray(value) || isArguments(value))) {
|
2158
2150
|
if (isDeep) {
|
2159
2151
|
// Recursively flatten arrays (susceptible to call stack limits).
|
2160
|
-
value = baseFlatten(value, isDeep, isStrict
|
2152
|
+
value = baseFlatten(value, isDeep, isStrict);
|
2161
2153
|
}
|
2162
2154
|
var valIndex = -1,
|
2163
2155
|
valLength = value.length;
|
@@ -2185,20 +2177,7 @@
|
|
2185
2177
|
* @param {Function} keysFunc The function to get the keys of `object`.
|
2186
2178
|
* @returns {Object} Returns `object`.
|
2187
2179
|
*/
|
2188
|
-
|
2189
|
-
var index = -1,
|
2190
|
-
iterable = toObject(object),
|
2191
|
-
props = keysFunc(object),
|
2192
|
-
length = props.length;
|
2193
|
-
|
2194
|
-
while (++index < length) {
|
2195
|
-
var key = props[index];
|
2196
|
-
if (iteratee(iterable[key], key, iterable) === false) {
|
2197
|
-
break;
|
2198
|
-
}
|
2199
|
-
}
|
2200
|
-
return object;
|
2201
|
-
}
|
2180
|
+
var baseFor = createBaseFor();
|
2202
2181
|
|
2203
2182
|
/**
|
2204
2183
|
* This function is like `baseFor` except that it iterates over properties
|
@@ -2210,19 +2189,7 @@
|
|
2210
2189
|
* @param {Function} keysFunc The function to get the keys of `object`.
|
2211
2190
|
* @returns {Object} Returns `object`.
|
2212
2191
|
*/
|
2213
|
-
|
2214
|
-
var iterable = toObject(object),
|
2215
|
-
props = keysFunc(object),
|
2216
|
-
length = props.length;
|
2217
|
-
|
2218
|
-
while (length--) {
|
2219
|
-
var key = props[length];
|
2220
|
-
if (iteratee(iterable[key], key, iterable) === false) {
|
2221
|
-
break;
|
2222
|
-
}
|
2223
|
-
}
|
2224
|
-
return object;
|
2225
|
-
}
|
2192
|
+
var baseForRight = createBaseFor(true);
|
2226
2193
|
|
2227
2194
|
/**
|
2228
2195
|
* The base implementation of `_.forIn` without support for callback
|
@@ -2287,30 +2254,6 @@
|
|
2287
2254
|
return result;
|
2288
2255
|
}
|
2289
2256
|
|
2290
|
-
/**
|
2291
|
-
* The base implementation of `_.invoke` which requires additional arguments
|
2292
|
-
* to be provided as an array of arguments rather than individually.
|
2293
|
-
*
|
2294
|
-
* @private
|
2295
|
-
* @param {Array|Object|string} collection The collection to iterate over.
|
2296
|
-
* @param {Function|string} methodName The name of the method to invoke or
|
2297
|
-
* the function invoked per iteration.
|
2298
|
-
* @param {Array} [args] The arguments to invoke the method with.
|
2299
|
-
* @returns {Array} Returns the array of results.
|
2300
|
-
*/
|
2301
|
-
function baseInvoke(collection, methodName, args) {
|
2302
|
-
var index = -1,
|
2303
|
-
isFunc = typeof methodName == 'function',
|
2304
|
-
length = collection ? collection.length : 0,
|
2305
|
-
result = isLength(length) ? Array(length) : [];
|
2306
|
-
|
2307
|
-
baseEach(collection, function(value) {
|
2308
|
-
var func = isFunc ? methodName : (value != null && value[methodName]);
|
2309
|
-
result[++index] = func ? func.apply(value, args) : undefined;
|
2310
|
-
});
|
2311
|
-
return result;
|
2312
|
-
}
|
2313
|
-
|
2314
2257
|
/**
|
2315
2258
|
* The base implementation of `_.isEqual` without support for `this` binding
|
2316
2259
|
* `customizer` functions.
|
@@ -2319,12 +2262,12 @@
|
|
2319
2262
|
* @param {*} value The value to compare.
|
2320
2263
|
* @param {*} other The other value to compare.
|
2321
2264
|
* @param {Function} [customizer] The function to customize comparing values.
|
2322
|
-
* @param {boolean} [
|
2265
|
+
* @param {boolean} [isLoose] Specify performing partial comparisons.
|
2323
2266
|
* @param {Array} [stackA] Tracks traversed `value` objects.
|
2324
2267
|
* @param {Array} [stackB] Tracks traversed `other` objects.
|
2325
2268
|
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
|
2326
2269
|
*/
|
2327
|
-
function baseIsEqual(value, other, customizer,
|
2270
|
+
function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {
|
2328
2271
|
// Exit early for identical values.
|
2329
2272
|
if (value === other) {
|
2330
2273
|
// Treat `+0` vs. `-0` as not equal.
|
@@ -2339,7 +2282,7 @@
|
|
2339
2282
|
// Return `false` unless both values are `NaN`.
|
2340
2283
|
return value !== value && other !== other;
|
2341
2284
|
}
|
2342
|
-
return baseIsEqualDeep(value, other, baseIsEqual, customizer,
|
2285
|
+
return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);
|
2343
2286
|
}
|
2344
2287
|
|
2345
2288
|
/**
|
@@ -2352,12 +2295,12 @@
|
|
2352
2295
|
* @param {Object} other The other object to compare.
|
2353
2296
|
* @param {Function} equalFunc The function to determine equivalents of values.
|
2354
2297
|
* @param {Function} [customizer] The function to customize comparing objects.
|
2355
|
-
* @param {boolean} [
|
2298
|
+
* @param {boolean} [isLoose] Specify performing partial comparisons.
|
2356
2299
|
* @param {Array} [stackA=[]] Tracks traversed `value` objects.
|
2357
2300
|
* @param {Array} [stackB=[]] Tracks traversed `other` objects.
|
2358
2301
|
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
|
2359
2302
|
*/
|
2360
|
-
function baseIsEqualDeep(object, other, equalFunc, customizer,
|
2303
|
+
function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
|
2361
2304
|
var objIsArr = isArray(object),
|
2362
2305
|
othIsArr = isArray(other),
|
2363
2306
|
objTag = arrayTag,
|
@@ -2379,21 +2322,27 @@
|
|
2379
2322
|
othIsArr = isTypedArray(other);
|
2380
2323
|
}
|
2381
2324
|
}
|
2382
|
-
var objIsObj = objTag == objectTag && !isHostObject(object),
|
2383
|
-
othIsObj = othTag == objectTag && !isHostObject(other),
|
2325
|
+
var objIsObj = (objTag == objectTag || (isLoose && objTag == funcTag)) && !isHostObject(object),
|
2326
|
+
othIsObj = (othTag == objectTag || (isLoose && othTag == funcTag)) && !isHostObject(other),
|
2384
2327
|
isSameTag = objTag == othTag;
|
2385
2328
|
|
2386
2329
|
if (isSameTag && !(objIsArr || objIsObj)) {
|
2387
2330
|
return equalByTag(object, other, objTag);
|
2388
2331
|
}
|
2389
|
-
|
2390
|
-
|
2332
|
+
if (isLoose) {
|
2333
|
+
if (!isSameTag && !(objIsObj && othIsObj)) {
|
2334
|
+
return false;
|
2335
|
+
}
|
2336
|
+
} else {
|
2337
|
+
var valWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
|
2338
|
+
othWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
|
2391
2339
|
|
2392
|
-
|
2393
|
-
|
2394
|
-
|
2395
|
-
|
2396
|
-
|
2340
|
+
if (valWrapped || othWrapped) {
|
2341
|
+
return equalFunc(valWrapped ? object.value() : object, othWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);
|
2342
|
+
}
|
2343
|
+
if (!isSameTag) {
|
2344
|
+
return false;
|
2345
|
+
}
|
2397
2346
|
}
|
2398
2347
|
// Assume cyclic values are equal.
|
2399
2348
|
// For more information on detecting circular references see https://es5.github.io/#JO.
|
@@ -2410,7 +2359,7 @@
|
|
2410
2359
|
stackA.push(object);
|
2411
2360
|
stackB.push(other);
|
2412
2361
|
|
2413
|
-
var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer,
|
2362
|
+
var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);
|
2414
2363
|
|
2415
2364
|
stackA.pop();
|
2416
2365
|
stackB.pop();
|
@@ -2420,7 +2369,7 @@
|
|
2420
2369
|
|
2421
2370
|
/**
|
2422
2371
|
* The base implementation of `_.isMatch` without support for callback
|
2423
|
-
* shorthands
|
2372
|
+
* shorthands and `this` binding.
|
2424
2373
|
*
|
2425
2374
|
* @private
|
2426
2375
|
* @param {Object} object The object to inspect.
|
@@ -2431,30 +2380,27 @@
|
|
2431
2380
|
* @returns {boolean} Returns `true` if `object` is a match, else `false`.
|
2432
2381
|
*/
|
2433
2382
|
function baseIsMatch(object, props, values, strictCompareFlags, customizer) {
|
2434
|
-
var length = props.length;
|
2435
|
-
if (object == null) {
|
2436
|
-
return !length;
|
2437
|
-
}
|
2438
2383
|
var index = -1,
|
2384
|
+
length = props.length,
|
2439
2385
|
noCustomizer = !customizer;
|
2440
2386
|
|
2441
2387
|
while (++index < length) {
|
2442
2388
|
if ((noCustomizer && strictCompareFlags[index])
|
2443
2389
|
? values[index] !== object[props[index]]
|
2444
|
-
: !
|
2390
|
+
: !(props[index] in object)
|
2445
2391
|
) {
|
2446
2392
|
return false;
|
2447
2393
|
}
|
2448
2394
|
}
|
2449
2395
|
index = -1;
|
2450
2396
|
while (++index < length) {
|
2451
|
-
var key = props[index]
|
2397
|
+
var key = props[index],
|
2398
|
+
objValue = object[key],
|
2399
|
+
srcValue = values[index];
|
2400
|
+
|
2452
2401
|
if (noCustomizer && strictCompareFlags[index]) {
|
2453
|
-
var result =
|
2402
|
+
var result = typeof objValue != 'undefined' || (key in object);
|
2454
2403
|
} else {
|
2455
|
-
var objValue = object[key],
|
2456
|
-
srcValue = values[index];
|
2457
|
-
|
2458
2404
|
result = customizer ? customizer(objValue, srcValue, key) : undefined;
|
2459
2405
|
if (typeof result == 'undefined') {
|
2460
2406
|
result = baseIsEqual(srcValue, objValue, customizer, true);
|
@@ -2469,7 +2415,7 @@
|
|
2469
2415
|
|
2470
2416
|
/**
|
2471
2417
|
* The base implementation of `_.map` without support for callback shorthands
|
2472
|
-
*
|
2418
|
+
* and `this` binding.
|
2473
2419
|
*
|
2474
2420
|
* @private
|
2475
2421
|
* @param {Array|Object|string} collection The collection to iterate over.
|
@@ -2495,13 +2441,17 @@
|
|
2495
2441
|
var props = keys(source),
|
2496
2442
|
length = props.length;
|
2497
2443
|
|
2444
|
+
if (!length) {
|
2445
|
+
return constant(true);
|
2446
|
+
}
|
2498
2447
|
if (length == 1) {
|
2499
2448
|
var key = props[0],
|
2500
2449
|
value = source[key];
|
2501
2450
|
|
2502
2451
|
if (isStrictComparable(value)) {
|
2503
2452
|
return function(object) {
|
2504
|
-
return object != null && object[key] === value &&
|
2453
|
+
return object != null && object[key] === value &&
|
2454
|
+
(typeof value != 'undefined' || (key in toObject(object)));
|
2505
2455
|
};
|
2506
2456
|
}
|
2507
2457
|
}
|
@@ -2514,7 +2464,7 @@
|
|
2514
2464
|
strictCompareFlags[length] = isStrictComparable(value);
|
2515
2465
|
}
|
2516
2466
|
return function(object) {
|
2517
|
-
return baseIsMatch(object, props, values, strictCompareFlags);
|
2467
|
+
return object != null && baseIsMatch(toObject(object), props, values, strictCompareFlags);
|
2518
2468
|
};
|
2519
2469
|
}
|
2520
2470
|
|
@@ -2530,7 +2480,8 @@
|
|
2530
2480
|
function baseMatchesProperty(key, value) {
|
2531
2481
|
if (isStrictComparable(value)) {
|
2532
2482
|
return function(object) {
|
2533
|
-
return object != null && object[key] === value
|
2483
|
+
return object != null && object[key] === value &&
|
2484
|
+
(typeof value != 'undefined' || (key in toObject(object)));
|
2534
2485
|
};
|
2535
2486
|
}
|
2536
2487
|
return function(object) {
|
@@ -2610,7 +2561,7 @@
|
|
2610
2561
|
if (isLength(srcValue.length) && (isArray(srcValue) || isTypedArray(srcValue))) {
|
2611
2562
|
result = isArray(value)
|
2612
2563
|
? value
|
2613
|
-
: (value ? arrayCopy(value) : []);
|
2564
|
+
: ((value && value.length) ? arrayCopy(value) : []);
|
2614
2565
|
}
|
2615
2566
|
else if (isPlainObject(srcValue) || isArguments(srcValue)) {
|
2616
2567
|
result = isArguments(value)
|
@@ -2647,30 +2598,6 @@
|
|
2647
2598
|
};
|
2648
2599
|
}
|
2649
2600
|
|
2650
|
-
/**
|
2651
|
-
* The base implementation of `_.pullAt` without support for individual
|
2652
|
-
* index arguments.
|
2653
|
-
*
|
2654
|
-
* @private
|
2655
|
-
* @param {Array} array The array to modify.
|
2656
|
-
* @param {number[]} indexes The indexes of elements to remove.
|
2657
|
-
* @returns {Array} Returns the new array of removed elements.
|
2658
|
-
*/
|
2659
|
-
function basePullAt(array, indexes) {
|
2660
|
-
var length = indexes.length,
|
2661
|
-
result = baseAt(array, indexes);
|
2662
|
-
|
2663
|
-
indexes.sort(baseCompareAscending);
|
2664
|
-
while (length--) {
|
2665
|
-
var index = parseFloat(indexes[length]);
|
2666
|
-
if (index != previous && isIndex(index)) {
|
2667
|
-
var previous = index;
|
2668
|
-
splice.call(array, index, 1);
|
2669
|
-
}
|
2670
|
-
}
|
2671
|
-
return result;
|
2672
|
-
}
|
2673
|
-
|
2674
2601
|
/**
|
2675
2602
|
* The base implementation of `_.random` without support for argument juggling
|
2676
2603
|
* and returning floating-point numbers.
|
@@ -2686,7 +2613,7 @@
|
|
2686
2613
|
|
2687
2614
|
/**
|
2688
2615
|
* The base implementation of `_.reduce` and `_.reduceRight` without support
|
2689
|
-
* for callback shorthands
|
2616
|
+
* for callback shorthands and `this` binding, which iterates over `collection`
|
2690
2617
|
* using the provided `eachFunc`.
|
2691
2618
|
*
|
2692
2619
|
* @private
|
@@ -2753,7 +2680,7 @@
|
|
2753
2680
|
|
2754
2681
|
/**
|
2755
2682
|
* The base implementation of `_.some` without support for callback shorthands
|
2756
|
-
*
|
2683
|
+
* and `this` binding.
|
2757
2684
|
*
|
2758
2685
|
* @private
|
2759
2686
|
* @param {Array|Object|string} collection The collection to iterate over.
|
@@ -2820,6 +2747,23 @@
|
|
2820
2747
|
});
|
2821
2748
|
}
|
2822
2749
|
|
2750
|
+
/**
|
2751
|
+
* The base implementation of `_.sum` without support for callback shorthands
|
2752
|
+
* and `this` binding.
|
2753
|
+
*
|
2754
|
+
* @private
|
2755
|
+
* @param {Array|Object|string} collection The collection to iterate over.
|
2756
|
+
* @param {Function} iteratee The function invoked per iteration.
|
2757
|
+
* @returns {number} Returns the sum.
|
2758
|
+
*/
|
2759
|
+
function baseSum(collection, iteratee) {
|
2760
|
+
var result = 0;
|
2761
|
+
baseEach(collection, function(value, index, collection) {
|
2762
|
+
result += +iteratee(value, index, collection) || 0;
|
2763
|
+
});
|
2764
|
+
return result;
|
2765
|
+
}
|
2766
|
+
|
2823
2767
|
/**
|
2824
2768
|
* The base implementation of `_.uniq` without support for callback shorthands
|
2825
2769
|
* and `this` binding.
|
@@ -2893,6 +2837,27 @@
|
|
2893
2837
|
return result;
|
2894
2838
|
}
|
2895
2839
|
|
2840
|
+
/**
|
2841
|
+
* The base implementation of `_.dropRightWhile`, `_.dropWhile`, `_.takeRightWhile`,
|
2842
|
+
* and `_.takeWhile` without support for callback shorthands and `this` binding.
|
2843
|
+
*
|
2844
|
+
* @private
|
2845
|
+
* @param {Array} array The array to query.
|
2846
|
+
* @param {Function} predicate The function invoked per iteration.
|
2847
|
+
* @param {boolean} [isDrop] Specify dropping elements instead of taking them.
|
2848
|
+
* @param {boolean} [fromRight] Specify iterating from right to left.
|
2849
|
+
* @returns {Array} Returns the slice of `array`.
|
2850
|
+
*/
|
2851
|
+
function baseWhile(array, predicate, isDrop, fromRight) {
|
2852
|
+
var length = array.length,
|
2853
|
+
index = fromRight ? length : -1;
|
2854
|
+
|
2855
|
+
while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}
|
2856
|
+
return isDrop
|
2857
|
+
? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
|
2858
|
+
: baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
|
2859
|
+
}
|
2860
|
+
|
2896
2861
|
/**
|
2897
2862
|
* The base implementation of `wrapperValue` which returns the result of
|
2898
2863
|
* performing a sequence of actions on the unwrapped `value`, where each
|
@@ -2901,7 +2866,7 @@
|
|
2901
2866
|
* @private
|
2902
2867
|
* @param {*} value The unwrapped value.
|
2903
2868
|
* @param {Array} actions Actions to peform to resolve the unwrapped value.
|
2904
|
-
* @returns {*} Returns the resolved
|
2869
|
+
* @returns {*} Returns the resolved value.
|
2905
2870
|
*/
|
2906
2871
|
function baseWrapperValue(value, actions) {
|
2907
2872
|
var result = value;
|
@@ -2928,8 +2893,7 @@
|
|
2928
2893
|
* @private
|
2929
2894
|
* @param {Array} array The sorted array to inspect.
|
2930
2895
|
* @param {*} value The value to evaluate.
|
2931
|
-
* @param {boolean} [retHighest] Specify returning the highest
|
2932
|
-
* of the lowest, index at which a value should be inserted into `array`.
|
2896
|
+
* @param {boolean} [retHighest] Specify returning the highest qualified index.
|
2933
2897
|
* @returns {number} Returns the index at which `value` should be inserted
|
2934
2898
|
* into `array`.
|
2935
2899
|
*/
|
@@ -2962,8 +2926,7 @@
|
|
2962
2926
|
* @param {Array} array The sorted array to inspect.
|
2963
2927
|
* @param {*} value The value to evaluate.
|
2964
2928
|
* @param {Function} iteratee The function invoked per iteration.
|
2965
|
-
* @param {boolean} [retHighest] Specify returning the highest
|
2966
|
-
* of the lowest, index at which a value should be inserted into `array`.
|
2929
|
+
* @param {boolean} [retHighest] Specify returning the highest qualified index.
|
2967
2930
|
* @returns {number} Returns the index at which `value` should be inserted
|
2968
2931
|
* into `array`.
|
2969
2932
|
*/
|
@@ -3129,6 +3092,9 @@
|
|
3129
3092
|
* object composed from the results of running each element in the collection
|
3130
3093
|
* through an iteratee.
|
3131
3094
|
*
|
3095
|
+
* **Note:** This function is used to create `_.countBy`, `_.groupBy`, `_.indexBy`,
|
3096
|
+
* and `_.partition`.
|
3097
|
+
*
|
3132
3098
|
* @private
|
3133
3099
|
* @param {Function} setter The function to set keys and values of the accumulator object.
|
3134
3100
|
* @param {Function} [initializer] The function to initialize the accumulator object.
|
@@ -3160,6 +3126,8 @@
|
|
3160
3126
|
* Creates a function that assigns properties of source object(s) to a given
|
3161
3127
|
* destination object.
|
3162
3128
|
*
|
3129
|
+
* **Note:** This function is used to create `_.assign`, `_.defaults`, and `_.merge`.
|
3130
|
+
*
|
3163
3131
|
* @private
|
3164
3132
|
* @param {Function} assigner The function to assign values.
|
3165
3133
|
* @returns {Function} Returns the new assigner function.
|
@@ -3199,6 +3167,56 @@
|
|
3199
3167
|
};
|
3200
3168
|
}
|
3201
3169
|
|
3170
|
+
/**
|
3171
|
+
* Creates a `baseEach` or `baseEachRight` function.
|
3172
|
+
*
|
3173
|
+
* @private
|
3174
|
+
* @param {Function} eachFunc The function to iterate over a collection.
|
3175
|
+
* @param {boolean} [fromRight] Specify iterating from right to left.
|
3176
|
+
* @returns {Function} Returns the new base function.
|
3177
|
+
*/
|
3178
|
+
function createBaseEach(eachFunc, fromRight) {
|
3179
|
+
return function(collection, iteratee) {
|
3180
|
+
var length = collection ? collection.length : 0;
|
3181
|
+
if (!isLength(length)) {
|
3182
|
+
return eachFunc(collection, iteratee);
|
3183
|
+
}
|
3184
|
+
var index = fromRight ? length : -1,
|
3185
|
+
iterable = toObject(collection);
|
3186
|
+
|
3187
|
+
while ((fromRight ? index-- : ++index < length)) {
|
3188
|
+
if (iteratee(iterable[index], index, iterable) === false) {
|
3189
|
+
break;
|
3190
|
+
}
|
3191
|
+
}
|
3192
|
+
return collection;
|
3193
|
+
};
|
3194
|
+
}
|
3195
|
+
|
3196
|
+
/**
|
3197
|
+
* Creates a base function for `_.forIn` or `_.forInRight`.
|
3198
|
+
*
|
3199
|
+
* @private
|
3200
|
+
* @param {boolean} [fromRight] Specify iterating from right to left.
|
3201
|
+
* @returns {Function} Returns the new base function.
|
3202
|
+
*/
|
3203
|
+
function createBaseFor(fromRight) {
|
3204
|
+
return function(object, iteratee, keysFunc) {
|
3205
|
+
var iterable = toObject(object),
|
3206
|
+
props = keysFunc(object),
|
3207
|
+
length = props.length,
|
3208
|
+
index = fromRight ? length : -1;
|
3209
|
+
|
3210
|
+
while ((fromRight ? index-- : ++index < length)) {
|
3211
|
+
var key = props[index];
|
3212
|
+
if (iteratee(iterable[key], key, iterable) === false) {
|
3213
|
+
break;
|
3214
|
+
}
|
3215
|
+
}
|
3216
|
+
return object;
|
3217
|
+
};
|
3218
|
+
}
|
3219
|
+
|
3202
3220
|
/**
|
3203
3221
|
* Creates a function that wraps `func` and invokes it with the `this`
|
3204
3222
|
* binding of `thisArg`.
|
@@ -3229,41 +3247,6 @@
|
|
3229
3247
|
return new SetCache(values);
|
3230
3248
|
};
|
3231
3249
|
|
3232
|
-
/**
|
3233
|
-
* Creates a function to compose other functions into a single function.
|
3234
|
-
*
|
3235
|
-
* @private
|
3236
|
-
* @param {boolean} [fromRight] Specify iterating from right to left.
|
3237
|
-
* @returns {Function} Returns the new composer function.
|
3238
|
-
*/
|
3239
|
-
function createComposer(fromRight) {
|
3240
|
-
return function() {
|
3241
|
-
var length = arguments.length,
|
3242
|
-
index = length,
|
3243
|
-
fromIndex = fromRight ? (length - 1) : 0;
|
3244
|
-
|
3245
|
-
if (!length) {
|
3246
|
-
return function() { return arguments[0]; };
|
3247
|
-
}
|
3248
|
-
var funcs = Array(length);
|
3249
|
-
while (index--) {
|
3250
|
-
funcs[index] = arguments[index];
|
3251
|
-
if (typeof funcs[index] != 'function') {
|
3252
|
-
throw new TypeError(FUNC_ERROR_TEXT);
|
3253
|
-
}
|
3254
|
-
}
|
3255
|
-
return function() {
|
3256
|
-
var index = fromIndex,
|
3257
|
-
result = funcs[index].apply(this, arguments);
|
3258
|
-
|
3259
|
-
while ((fromRight ? index-- : ++index < length)) {
|
3260
|
-
result = funcs[index].call(this, result);
|
3261
|
-
}
|
3262
|
-
return result;
|
3263
|
-
};
|
3264
|
-
};
|
3265
|
-
}
|
3266
|
-
|
3267
3250
|
/**
|
3268
3251
|
* Creates a function that produces compound words out of the words in a
|
3269
3252
|
* given string.
|
@@ -3306,7 +3289,26 @@
|
|
3306
3289
|
}
|
3307
3290
|
|
3308
3291
|
/**
|
3309
|
-
* Creates a
|
3292
|
+
* Creates a `_.curry` or `_.curryRight` function.
|
3293
|
+
*
|
3294
|
+
* @private
|
3295
|
+
* @param {boolean} flag The curry bit flag.
|
3296
|
+
* @returns {Function} Returns the new curry function.
|
3297
|
+
*/
|
3298
|
+
function createCurry(flag) {
|
3299
|
+
function curryFunc(func, arity, guard) {
|
3300
|
+
if (guard && isIterateeCall(func, arity, guard)) {
|
3301
|
+
arity = null;
|
3302
|
+
}
|
3303
|
+
var result = createWrapper(func, flag, null, null, null, null, null, arity);
|
3304
|
+
result.placeholder = curryFunc.placeholder;
|
3305
|
+
return result;
|
3306
|
+
}
|
3307
|
+
return curryFunc;
|
3308
|
+
}
|
3309
|
+
|
3310
|
+
/**
|
3311
|
+
* Creates a `_.max` or `_.min` function.
|
3310
3312
|
*
|
3311
3313
|
* @private
|
3312
3314
|
* @param {Function} arrayFunc The function to get the extremum value from an array.
|
@@ -3338,6 +3340,204 @@
|
|
3338
3340
|
};
|
3339
3341
|
}
|
3340
3342
|
|
3343
|
+
/**
|
3344
|
+
* Creates a `_.find` or `_.findLast` function.
|
3345
|
+
*
|
3346
|
+
* @private
|
3347
|
+
* @param {Function} eachFunc The function to iterate over a collection.
|
3348
|
+
* @param {boolean} [fromRight] Specify iterating from right to left.
|
3349
|
+
* @returns {Function} Returns the new find function.
|
3350
|
+
*/
|
3351
|
+
function createFind(eachFunc, fromRight) {
|
3352
|
+
return function(collection, predicate, thisArg) {
|
3353
|
+
predicate = getCallback(predicate, thisArg, 3);
|
3354
|
+
if (isArray(collection)) {
|
3355
|
+
var index = baseFindIndex(collection, predicate, fromRight);
|
3356
|
+
return index > -1 ? collection[index] : undefined;
|
3357
|
+
}
|
3358
|
+
return baseFind(collection, predicate, eachFunc);
|
3359
|
+
}
|
3360
|
+
}
|
3361
|
+
|
3362
|
+
/**
|
3363
|
+
* Creates a `_.findIndex` or `_.findLastIndex` function.
|
3364
|
+
*
|
3365
|
+
* @private
|
3366
|
+
* @param {boolean} [fromRight] Specify iterating from right to left.
|
3367
|
+
* @returns {Function} Returns the new find function.
|
3368
|
+
*/
|
3369
|
+
function createFindIndex(fromRight) {
|
3370
|
+
return function(array, predicate, thisArg) {
|
3371
|
+
if (!(array && array.length)) {
|
3372
|
+
return -1;
|
3373
|
+
}
|
3374
|
+
predicate = getCallback(predicate, thisArg, 3);
|
3375
|
+
return baseFindIndex(array, predicate, fromRight);
|
3376
|
+
};
|
3377
|
+
}
|
3378
|
+
|
3379
|
+
/**
|
3380
|
+
* Creates a `_.findKey` or `_.findLastKey` function.
|
3381
|
+
*
|
3382
|
+
* @private
|
3383
|
+
* @param {Function} objectFunc The function to iterate over an object.
|
3384
|
+
* @returns {Function} Returns the new find function.
|
3385
|
+
*/
|
3386
|
+
function createFindKey(objectFunc) {
|
3387
|
+
return function(object, predicate, thisArg) {
|
3388
|
+
predicate = getCallback(predicate, thisArg, 3);
|
3389
|
+
return baseFind(object, predicate, objectFunc, true);
|
3390
|
+
};
|
3391
|
+
}
|
3392
|
+
|
3393
|
+
/**
|
3394
|
+
* Creates a `_.flow` or `_.flowRight` function.
|
3395
|
+
*
|
3396
|
+
* @private
|
3397
|
+
* @param {boolean} [fromRight] Specify iterating from right to left.
|
3398
|
+
* @returns {Function} Returns the new flow function.
|
3399
|
+
*/
|
3400
|
+
function createFlow(fromRight) {
|
3401
|
+
return function() {
|
3402
|
+
var length = arguments.length;
|
3403
|
+
if (!length) {
|
3404
|
+
return function() { return arguments[0]; };
|
3405
|
+
}
|
3406
|
+
var wrapper,
|
3407
|
+
index = fromRight ? length : -1,
|
3408
|
+
leftIndex = 0,
|
3409
|
+
funcs = Array(length);
|
3410
|
+
|
3411
|
+
while ((fromRight ? index-- : ++index < length)) {
|
3412
|
+
var func = funcs[leftIndex++] = arguments[index];
|
3413
|
+
if (typeof func != 'function') {
|
3414
|
+
throw new TypeError(FUNC_ERROR_TEXT);
|
3415
|
+
}
|
3416
|
+
var funcName = wrapper ? '' : getFuncName(func);
|
3417
|
+
wrapper = funcName == 'wrapper' ? new LodashWrapper([]) : wrapper;
|
3418
|
+
}
|
3419
|
+
index = wrapper ? -1 : length;
|
3420
|
+
while (++index < length) {
|
3421
|
+
func = funcs[index];
|
3422
|
+
funcName = getFuncName(func);
|
3423
|
+
|
3424
|
+
var data = funcName == 'wrapper' ? getData(func) : null;
|
3425
|
+
if (data && isLaziable(data[0])) {
|
3426
|
+
wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
|
3427
|
+
} else {
|
3428
|
+
wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func);
|
3429
|
+
}
|
3430
|
+
}
|
3431
|
+
return function() {
|
3432
|
+
var args = arguments;
|
3433
|
+
if (wrapper && args.length == 1 && isArray(args[0])) {
|
3434
|
+
return wrapper.plant(args[0]).value();
|
3435
|
+
}
|
3436
|
+
var index = 0,
|
3437
|
+
result = funcs[index].apply(this, args);
|
3438
|
+
|
3439
|
+
while (++index < length) {
|
3440
|
+
result = funcs[index].call(this, result);
|
3441
|
+
}
|
3442
|
+
return result;
|
3443
|
+
};
|
3444
|
+
};
|
3445
|
+
}
|
3446
|
+
|
3447
|
+
/**
|
3448
|
+
* Creates a function for `_.forEach` or `_.forEachRight`.
|
3449
|
+
*
|
3450
|
+
* @private
|
3451
|
+
* @param {Function} arrayFunc The function to iterate over an array.
|
3452
|
+
* @param {Function} eachFunc The function to iterate over a collection.
|
3453
|
+
* @returns {Function} Returns the new each function.
|
3454
|
+
*/
|
3455
|
+
function createForEach(arrayFunc, eachFunc) {
|
3456
|
+
return function(collection, iteratee, thisArg) {
|
3457
|
+
return (typeof iteratee == 'function' && typeof thisArg == 'undefined' && isArray(collection))
|
3458
|
+
? arrayFunc(collection, iteratee)
|
3459
|
+
: eachFunc(collection, bindCallback(iteratee, thisArg, 3));
|
3460
|
+
};
|
3461
|
+
}
|
3462
|
+
|
3463
|
+
/**
|
3464
|
+
* Creates a function for `_.forIn` or `_.forInRight`.
|
3465
|
+
*
|
3466
|
+
* @private
|
3467
|
+
* @param {Function} objectFunc The function to iterate over an object.
|
3468
|
+
* @returns {Function} Returns the new each function.
|
3469
|
+
*/
|
3470
|
+
function createForIn(objectFunc) {
|
3471
|
+
return function(object, iteratee, thisArg) {
|
3472
|
+
if (typeof iteratee != 'function' || typeof thisArg != 'undefined') {
|
3473
|
+
iteratee = bindCallback(iteratee, thisArg, 3);
|
3474
|
+
}
|
3475
|
+
return objectFunc(object, iteratee, keysIn);
|
3476
|
+
};
|
3477
|
+
}
|
3478
|
+
|
3479
|
+
/**
|
3480
|
+
* Creates a function for `_.forOwn` or `_.forOwnRight`.
|
3481
|
+
*
|
3482
|
+
* @private
|
3483
|
+
* @param {Function} objectFunc The function to iterate over an object.
|
3484
|
+
* @returns {Function} Returns the new each function.
|
3485
|
+
*/
|
3486
|
+
function createForOwn(objectFunc) {
|
3487
|
+
return function(object, iteratee, thisArg) {
|
3488
|
+
if (typeof iteratee != 'function' || typeof thisArg != 'undefined') {
|
3489
|
+
iteratee = bindCallback(iteratee, thisArg, 3);
|
3490
|
+
}
|
3491
|
+
return objectFunc(object, iteratee);
|
3492
|
+
};
|
3493
|
+
}
|
3494
|
+
|
3495
|
+
/**
|
3496
|
+
* Creates a function for `_.padLeft` or `_.padRight`.
|
3497
|
+
*
|
3498
|
+
* @private
|
3499
|
+
* @param {boolean} [fromRight] Specify padding from the right.
|
3500
|
+
* @returns {Function} Returns the new pad function.
|
3501
|
+
*/
|
3502
|
+
function createPadDir(fromRight) {
|
3503
|
+
return function(string, length, chars) {
|
3504
|
+
string = baseToString(string);
|
3505
|
+
return string && ((fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string));
|
3506
|
+
};
|
3507
|
+
}
|
3508
|
+
|
3509
|
+
/**
|
3510
|
+
* Creates a `_.partial` or `_.partialRight` function.
|
3511
|
+
*
|
3512
|
+
* @private
|
3513
|
+
* @param {boolean} flag The partial bit flag.
|
3514
|
+
* @returns {Function} Returns the new partial function.
|
3515
|
+
*/
|
3516
|
+
function createPartial(flag) {
|
3517
|
+
var partialFunc = restParam(function(func, partials) {
|
3518
|
+
var holders = replaceHolders(partials, partialFunc.placeholder);
|
3519
|
+
return createWrapper(func, flag, null, partials, holders);
|
3520
|
+
});
|
3521
|
+
return partialFunc;
|
3522
|
+
}
|
3523
|
+
|
3524
|
+
/**
|
3525
|
+
* Creates a function for `_.reduce` or `_.reduceRight`.
|
3526
|
+
*
|
3527
|
+
* @private
|
3528
|
+
* @param {Function} arrayFunc The function to iterate over an array.
|
3529
|
+
* @param {Function} eachFunc The function to iterate over a collection.
|
3530
|
+
* @returns {Function} Returns the new each function.
|
3531
|
+
*/
|
3532
|
+
function createReduce(arrayFunc, eachFunc) {
|
3533
|
+
return function(collection, iteratee, accumulator, thisArg) {
|
3534
|
+
var initFromArray = arguments.length < 3;
|
3535
|
+
return (typeof iteratee == 'function' && typeof thisArg == 'undefined' && isArray(collection))
|
3536
|
+
? arrayFunc(collection, iteratee, accumulator, initFromArray)
|
3537
|
+
: baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc);
|
3538
|
+
};
|
3539
|
+
}
|
3540
|
+
|
3341
3541
|
/**
|
3342
3542
|
* Creates a function that wraps `func` and invokes it with optional `this`
|
3343
3543
|
* binding of, partial application, and currying.
|
@@ -3401,7 +3601,12 @@
|
|
3401
3601
|
if (!isCurryBound) {
|
3402
3602
|
bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);
|
3403
3603
|
}
|
3404
|
-
var
|
3604
|
+
var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity],
|
3605
|
+
result = createHybridWrapper.apply(undefined, newData);
|
3606
|
+
|
3607
|
+
if (isLaziable(func)) {
|
3608
|
+
setData(result, newData);
|
3609
|
+
}
|
3405
3610
|
result.placeholder = placeholder;
|
3406
3611
|
return result;
|
3407
3612
|
}
|
@@ -3423,9 +3628,8 @@
|
|
3423
3628
|
}
|
3424
3629
|
|
3425
3630
|
/**
|
3426
|
-
* Creates the
|
3427
|
-
* The `chars` string
|
3428
|
-
* exceeds the padding length.
|
3631
|
+
* Creates the padding required for `string` based on the given `length`.
|
3632
|
+
* The `chars` string is truncated if the number of characters exceeds `length`.
|
3429
3633
|
*
|
3430
3634
|
* @private
|
3431
3635
|
* @param {string} string The string to create padding for.
|
@@ -3433,7 +3637,7 @@
|
|
3433
3637
|
* @param {string} [chars=' '] The string used as padding.
|
3434
3638
|
* @returns {string} Returns the pad for `string`.
|
3435
3639
|
*/
|
3436
|
-
function
|
3640
|
+
function createPadding(string, length, chars) {
|
3437
3641
|
var strLength = string.length;
|
3438
3642
|
length = +length;
|
3439
3643
|
|
@@ -3482,6 +3686,22 @@
|
|
3482
3686
|
return wrapper;
|
3483
3687
|
}
|
3484
3688
|
|
3689
|
+
/**
|
3690
|
+
* Creates a `_.sortedIndex` or `_.sortedLastIndex` function.
|
3691
|
+
*
|
3692
|
+
* @private
|
3693
|
+
* @param {boolean} [retHighest] Specify returning the highest qualified index.
|
3694
|
+
* @returns {Function} Returns the new index function.
|
3695
|
+
*/
|
3696
|
+
function createSortedIndex(retHighest) {
|
3697
|
+
return function(array, value, iteratee, thisArg) {
|
3698
|
+
var func = getCallback(iteratee);
|
3699
|
+
return (func === baseCallback && iteratee == null)
|
3700
|
+
? binaryIndex(array, value, retHighest)
|
3701
|
+
: binaryIndexBy(array, value, func(iteratee, thisArg, 1), retHighest);
|
3702
|
+
};
|
3703
|
+
}
|
3704
|
+
|
3485
3705
|
/**
|
3486
3706
|
* Creates a function that either curries or invokes `func` with optional
|
3487
3707
|
* `this` binding and partially applied arguments.
|
@@ -3524,10 +3744,10 @@
|
|
3524
3744
|
|
3525
3745
|
partials = holders = null;
|
3526
3746
|
}
|
3527
|
-
var data =
|
3747
|
+
var data = isBindKey ? null : getData(func),
|
3528
3748
|
newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];
|
3529
3749
|
|
3530
|
-
if (data
|
3750
|
+
if (data) {
|
3531
3751
|
mergeData(newData, data);
|
3532
3752
|
bitmask = newData[1];
|
3533
3753
|
arity = newData[9];
|
@@ -3556,18 +3776,18 @@
|
|
3556
3776
|
* @param {Array} other The other array to compare.
|
3557
3777
|
* @param {Function} equalFunc The function to determine equivalents of values.
|
3558
3778
|
* @param {Function} [customizer] The function to customize comparing arrays.
|
3559
|
-
* @param {boolean} [
|
3779
|
+
* @param {boolean} [isLoose] Specify performing partial comparisons.
|
3560
3780
|
* @param {Array} [stackA] Tracks traversed `value` objects.
|
3561
3781
|
* @param {Array} [stackB] Tracks traversed `other` objects.
|
3562
3782
|
* @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
|
3563
3783
|
*/
|
3564
|
-
function equalArrays(array, other, equalFunc, customizer,
|
3784
|
+
function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {
|
3565
3785
|
var index = -1,
|
3566
3786
|
arrLength = array.length,
|
3567
3787
|
othLength = other.length,
|
3568
3788
|
result = true;
|
3569
3789
|
|
3570
|
-
if (arrLength != othLength && !(
|
3790
|
+
if (arrLength != othLength && !(isLoose && othLength > arrLength)) {
|
3571
3791
|
return false;
|
3572
3792
|
}
|
3573
3793
|
// Deep compare the contents, ignoring non-numeric properties.
|
@@ -3577,23 +3797,23 @@
|
|
3577
3797
|
|
3578
3798
|
result = undefined;
|
3579
3799
|
if (customizer) {
|
3580
|
-
result =
|
3800
|
+
result = isLoose
|
3581
3801
|
? customizer(othValue, arrValue, index)
|
3582
3802
|
: customizer(arrValue, othValue, index);
|
3583
3803
|
}
|
3584
3804
|
if (typeof result == 'undefined') {
|
3585
3805
|
// Recursively compare arrays (susceptible to call stack limits).
|
3586
|
-
if (
|
3806
|
+
if (isLoose) {
|
3587
3807
|
var othIndex = othLength;
|
3588
3808
|
while (othIndex--) {
|
3589
3809
|
othValue = other[othIndex];
|
3590
|
-
result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer,
|
3810
|
+
result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);
|
3591
3811
|
if (result) {
|
3592
3812
|
break;
|
3593
3813
|
}
|
3594
3814
|
}
|
3595
3815
|
} else {
|
3596
|
-
result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer,
|
3816
|
+
result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);
|
3597
3817
|
}
|
3598
3818
|
}
|
3599
3819
|
}
|
@@ -3649,26 +3869,26 @@
|
|
3649
3869
|
* @param {Object} other The other object to compare.
|
3650
3870
|
* @param {Function} equalFunc The function to determine equivalents of values.
|
3651
3871
|
* @param {Function} [customizer] The function to customize comparing values.
|
3652
|
-
* @param {boolean} [
|
3872
|
+
* @param {boolean} [isLoose] Specify performing partial comparisons.
|
3653
3873
|
* @param {Array} [stackA] Tracks traversed `value` objects.
|
3654
3874
|
* @param {Array} [stackB] Tracks traversed `other` objects.
|
3655
3875
|
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
|
3656
3876
|
*/
|
3657
|
-
function equalObjects(object, other, equalFunc, customizer,
|
3877
|
+
function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
|
3658
3878
|
var objProps = keys(object),
|
3659
3879
|
objLength = objProps.length,
|
3660
3880
|
othProps = keys(other),
|
3661
3881
|
othLength = othProps.length;
|
3662
3882
|
|
3663
|
-
if (objLength != othLength && !
|
3883
|
+
if (objLength != othLength && !isLoose) {
|
3664
3884
|
return false;
|
3665
3885
|
}
|
3666
|
-
var
|
3886
|
+
var skipCtor = isLoose,
|
3667
3887
|
index = -1;
|
3668
3888
|
|
3669
3889
|
while (++index < objLength) {
|
3670
3890
|
var key = objProps[index],
|
3671
|
-
result = hasOwnProperty.call(other, key);
|
3891
|
+
result = isLoose ? key in other : hasOwnProperty.call(other, key);
|
3672
3892
|
|
3673
3893
|
if (result) {
|
3674
3894
|
var objValue = object[key],
|
@@ -3676,21 +3896,21 @@
|
|
3676
3896
|
|
3677
3897
|
result = undefined;
|
3678
3898
|
if (customizer) {
|
3679
|
-
result =
|
3899
|
+
result = isLoose
|
3680
3900
|
? customizer(othValue, objValue, key)
|
3681
3901
|
: customizer(objValue, othValue, key);
|
3682
3902
|
}
|
3683
3903
|
if (typeof result == 'undefined') {
|
3684
3904
|
// Recursively compare objects (susceptible to call stack limits).
|
3685
|
-
result = (objValue && objValue === othValue) || equalFunc(objValue, othValue, customizer,
|
3905
|
+
result = (objValue && objValue === othValue) || equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB);
|
3686
3906
|
}
|
3687
3907
|
}
|
3688
3908
|
if (!result) {
|
3689
3909
|
return false;
|
3690
3910
|
}
|
3691
|
-
|
3911
|
+
skipCtor || (skipCtor = key == 'constructor');
|
3692
3912
|
}
|
3693
|
-
if (!
|
3913
|
+
if (!skipCtor) {
|
3694
3914
|
var objCtor = object.constructor,
|
3695
3915
|
othCtor = other.constructor;
|
3696
3916
|
|
@@ -3708,7 +3928,7 @@
|
|
3708
3928
|
/**
|
3709
3929
|
* Gets the extremum value of `collection` invoking `iteratee` for each value
|
3710
3930
|
* in `collection` to generate the criterion by which the value is ranked.
|
3711
|
-
* The `iteratee` is invoked with three arguments
|
3931
|
+
* The `iteratee` is invoked with three arguments: (value, index, collection).
|
3712
3932
|
*
|
3713
3933
|
* @private
|
3714
3934
|
* @param {Array|Object|string} collection The collection to iterate over.
|
@@ -3759,6 +3979,37 @@
|
|
3759
3979
|
return metaMap.get(func);
|
3760
3980
|
};
|
3761
3981
|
|
3982
|
+
/**
|
3983
|
+
* Gets the name of `func`.
|
3984
|
+
*
|
3985
|
+
* @private
|
3986
|
+
* @param {Function} func The function to query.
|
3987
|
+
* @returns {string} Returns the function name.
|
3988
|
+
*/
|
3989
|
+
var getFuncName = (function() {
|
3990
|
+
if (!support.funcNames) {
|
3991
|
+
return constant('');
|
3992
|
+
}
|
3993
|
+
if (constant.name == 'constant') {
|
3994
|
+
return baseProperty('name');
|
3995
|
+
}
|
3996
|
+
return function(func) {
|
3997
|
+
var result = func.name,
|
3998
|
+
array = realNames[result],
|
3999
|
+
length = array ? array.length : 0;
|
4000
|
+
|
4001
|
+
while (length--) {
|
4002
|
+
var data = array[length],
|
4003
|
+
otherFunc = data.func;
|
4004
|
+
|
4005
|
+
if (otherFunc == null || otherFunc == func) {
|
4006
|
+
return data.name;
|
4007
|
+
}
|
4008
|
+
}
|
4009
|
+
return result;
|
4010
|
+
};
|
4011
|
+
}());
|
4012
|
+
|
3762
4013
|
/**
|
3763
4014
|
* Gets the appropriate "indexOf" function. If the `_.indexOf` method is
|
3764
4015
|
* customized this function returns the custom method, otherwise it returns
|
@@ -3880,31 +4131,6 @@
|
|
3880
4131
|
return result;
|
3881
4132
|
}
|
3882
4133
|
|
3883
|
-
/**
|
3884
|
-
* Checks if `func` is eligible for `this` binding.
|
3885
|
-
*
|
3886
|
-
* @private
|
3887
|
-
* @param {Function} func The function to check.
|
3888
|
-
* @returns {boolean} Returns `true` if `func` is eligible, else `false`.
|
3889
|
-
*/
|
3890
|
-
function isBindable(func) {
|
3891
|
-
var support = lodash.support,
|
3892
|
-
result = !(support.funcNames ? func.name : support.funcDecomp);
|
3893
|
-
|
3894
|
-
if (!result) {
|
3895
|
-
var source = fnToString.call(func);
|
3896
|
-
if (!support.funcNames) {
|
3897
|
-
result = !reFuncName.test(source);
|
3898
|
-
}
|
3899
|
-
if (!result) {
|
3900
|
-
// Check if `func` references the `this` keyword and store the result.
|
3901
|
-
result = reThis.test(source) || isNative(func);
|
3902
|
-
baseSetData(func, result);
|
3903
|
-
}
|
3904
|
-
}
|
3905
|
-
return result;
|
3906
|
-
}
|
3907
|
-
|
3908
4134
|
/**
|
3909
4135
|
* Checks if `value` is a valid array-like index.
|
3910
4136
|
*
|
@@ -3946,12 +4172,22 @@
|
|
3946
4172
|
return false;
|
3947
4173
|
}
|
3948
4174
|
|
4175
|
+
/**
|
4176
|
+
* Checks if `func` has a lazy counterpart.
|
4177
|
+
*
|
4178
|
+
* @private
|
4179
|
+
* @param {Function} func The function to check.
|
4180
|
+
* @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`.
|
4181
|
+
*/
|
4182
|
+
function isLaziable(func) {
|
4183
|
+
var funcName = getFuncName(func);
|
4184
|
+
return !!funcName && func === lodash[funcName] && funcName in LazyWrapper.prototype;
|
4185
|
+
}
|
4186
|
+
|
3949
4187
|
/**
|
3950
4188
|
* Checks if `value` is a valid array-like length.
|
3951
4189
|
*
|
3952
|
-
* **Note:** This function is based on
|
3953
|
-
* [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength)
|
3954
|
-
* for more details.
|
4190
|
+
* **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).
|
3955
4191
|
*
|
3956
4192
|
* @private
|
3957
4193
|
* @param {*} value The value to check.
|
@@ -3991,22 +4227,13 @@
|
|
3991
4227
|
function mergeData(data, source) {
|
3992
4228
|
var bitmask = data[1],
|
3993
4229
|
srcBitmask = source[1],
|
3994
|
-
newBitmask = bitmask | srcBitmask
|
3995
|
-
|
3996
|
-
var arityFlags = ARY_FLAG | REARG_FLAG,
|
3997
|
-
bindFlags = BIND_FLAG | BIND_KEY_FLAG,
|
3998
|
-
comboFlags = arityFlags | bindFlags | CURRY_BOUND_FLAG | CURRY_RIGHT_FLAG;
|
4230
|
+
newBitmask = bitmask | srcBitmask,
|
4231
|
+
isCommon = newBitmask < ARY_FLAG;
|
3999
4232
|
|
4000
|
-
var
|
4001
|
-
|
4002
|
-
|
4003
|
-
|
4004
|
-
|
4005
|
-
var isCommon = !(bitmask >= REARG_FLAG && srcBitmask > bindFlags) &&
|
4006
|
-
!(bitmask > bindFlags && srcBitmask >= REARG_FLAG);
|
4007
|
-
|
4008
|
-
var isCombo = (newBitmask >= arityFlags && newBitmask <= comboFlags) &&
|
4009
|
-
(bitmask < REARG_FLAG || ((isRearg || isAry) && argPos.length <= ary));
|
4233
|
+
var isCombo =
|
4234
|
+
(srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) ||
|
4235
|
+
(srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) ||
|
4236
|
+
(srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG);
|
4010
4237
|
|
4011
4238
|
// Exit early if metadata can't be merged.
|
4012
4239
|
if (!(isCommon || isCombo)) {
|
@@ -4347,10 +4574,9 @@
|
|
4347
4574
|
* Creates an array excluding all values of the provided arrays using
|
4348
4575
|
* `SameValueZero` for equality comparisons.
|
4349
4576
|
*
|
4350
|
-
* **Note:** `SameValueZero`
|
4351
|
-
* e.g. `===`, except that
|
4352
|
-
*
|
4353
|
-
* for more details.
|
4577
|
+
* **Note:** [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
|
4578
|
+
* comparisons are like strict equality comparisons, e.g. `===`, except that
|
4579
|
+
* `NaN` matches `NaN`.
|
4354
4580
|
*
|
4355
4581
|
* @static
|
4356
4582
|
* @memberOf _
|
@@ -4363,19 +4589,11 @@
|
|
4363
4589
|
* _.difference([1, 2, 3], [4, 2]);
|
4364
4590
|
* // => [1, 3]
|
4365
4591
|
*/
|
4366
|
-
|
4367
|
-
|
4368
|
-
|
4369
|
-
|
4370
|
-
|
4371
|
-
while (++index < length) {
|
4372
|
-
var value = args[index];
|
4373
|
-
if (isArray(value) || isArguments(value)) {
|
4374
|
-
break;
|
4375
|
-
}
|
4376
|
-
}
|
4377
|
-
return baseDifference(value, baseFlatten(args, false, true, ++index));
|
4378
|
-
}
|
4592
|
+
var difference = restParam(function(array, values) {
|
4593
|
+
return (isArray(array) || isArguments(array))
|
4594
|
+
? baseDifference(array, baseFlatten(values, false, true))
|
4595
|
+
: [];
|
4596
|
+
});
|
4379
4597
|
|
4380
4598
|
/**
|
4381
4599
|
* Creates a slice of `array` with `n` elements dropped from the beginning.
|
@@ -4451,7 +4669,7 @@
|
|
4451
4669
|
/**
|
4452
4670
|
* Creates a slice of `array` excluding elements dropped from the end.
|
4453
4671
|
* Elements are dropped until `predicate` returns falsey. The predicate is
|
4454
|
-
* bound to `thisArg` and invoked with three arguments
|
4672
|
+
* bound to `thisArg` and invoked with three arguments: (value, index, array).
|
4455
4673
|
*
|
4456
4674
|
* If a property name is provided for `predicate` the created `_.property`
|
4457
4675
|
* style callback returns the property value of the given element.
|
@@ -4498,19 +4716,15 @@
|
|
4498
4716
|
* // => ['barney', 'fred', 'pebbles']
|
4499
4717
|
*/
|
4500
4718
|
function dropRightWhile(array, predicate, thisArg) {
|
4501
|
-
|
4502
|
-
|
4503
|
-
|
4504
|
-
}
|
4505
|
-
predicate = getCallback(predicate, thisArg, 3);
|
4506
|
-
while (length-- && predicate(array[length], length, array)) {}
|
4507
|
-
return baseSlice(array, 0, length + 1);
|
4719
|
+
return (array && array.length)
|
4720
|
+
? baseWhile(array, getCallback(predicate, thisArg, 3), true, true)
|
4721
|
+
: [];
|
4508
4722
|
}
|
4509
4723
|
|
4510
4724
|
/**
|
4511
4725
|
* Creates a slice of `array` excluding elements dropped from the beginning.
|
4512
4726
|
* Elements are dropped until `predicate` returns falsey. The predicate is
|
4513
|
-
* bound to `thisArg` and invoked with three arguments
|
4727
|
+
* bound to `thisArg` and invoked with three arguments: (value, index, array).
|
4514
4728
|
*
|
4515
4729
|
* If a property name is provided for `predicate` the created `_.property`
|
4516
4730
|
* style callback returns the property value of the given element.
|
@@ -4557,14 +4771,9 @@
|
|
4557
4771
|
* // => ['barney', 'fred', 'pebbles']
|
4558
4772
|
*/
|
4559
4773
|
function dropWhile(array, predicate, thisArg) {
|
4560
|
-
|
4561
|
-
|
4562
|
-
|
4563
|
-
}
|
4564
|
-
var index = -1;
|
4565
|
-
predicate = getCallback(predicate, thisArg, 3);
|
4566
|
-
while (++index < length && predicate(array[index], index, array)) {}
|
4567
|
-
return baseSlice(array, index);
|
4774
|
+
return (array && array.length)
|
4775
|
+
? baseWhile(array, getCallback(predicate, thisArg, 3), true)
|
4776
|
+
: [];
|
4568
4777
|
}
|
4569
4778
|
|
4570
4779
|
/**
|
@@ -4581,6 +4790,19 @@
|
|
4581
4790
|
* @param {number} [start=0] The start position.
|
4582
4791
|
* @param {number} [end=array.length] The end position.
|
4583
4792
|
* @returns {Array} Returns `array`.
|
4793
|
+
* @example
|
4794
|
+
*
|
4795
|
+
* var array = [1, 2, 3];
|
4796
|
+
*
|
4797
|
+
* _.fill(array, 'a');
|
4798
|
+
* console.log(array);
|
4799
|
+
* // => ['a', 'a', 'a']
|
4800
|
+
*
|
4801
|
+
* _.fill(Array(3), 2);
|
4802
|
+
* // => [2, 2, 2]
|
4803
|
+
*
|
4804
|
+
* _.fill([4, 6, 8], '*', 1, 2);
|
4805
|
+
* // => [4, '*', 8]
|
4584
4806
|
*/
|
4585
4807
|
function fill(array, value, start, end) {
|
4586
4808
|
var length = array ? array.length : 0;
|
@@ -4596,7 +4818,7 @@
|
|
4596
4818
|
|
4597
4819
|
/**
|
4598
4820
|
* This method is like `_.find` except that it returns the index of the first
|
4599
|
-
* element `predicate` returns truthy for
|
4821
|
+
* element `predicate` returns truthy for instead of the element itself.
|
4600
4822
|
*
|
4601
4823
|
* If a property name is provided for `predicate` the created `_.property`
|
4602
4824
|
* style callback returns the property value of the given element.
|
@@ -4642,18 +4864,7 @@
|
|
4642
4864
|
* _.findIndex(users, 'active');
|
4643
4865
|
* // => 2
|
4644
4866
|
*/
|
4645
|
-
|
4646
|
-
var index = -1,
|
4647
|
-
length = array ? array.length : 0;
|
4648
|
-
|
4649
|
-
predicate = getCallback(predicate, thisArg, 3);
|
4650
|
-
while (++index < length) {
|
4651
|
-
if (predicate(array[index], index, array)) {
|
4652
|
-
return index;
|
4653
|
-
}
|
4654
|
-
}
|
4655
|
-
return -1;
|
4656
|
-
}
|
4867
|
+
var findIndex = createFindIndex();
|
4657
4868
|
|
4658
4869
|
/**
|
4659
4870
|
* This method is like `_.findIndex` except that it iterates over elements
|
@@ -4703,16 +4914,7 @@
|
|
4703
4914
|
* _.findLastIndex(users, 'active');
|
4704
4915
|
* // => 0
|
4705
4916
|
*/
|
4706
|
-
|
4707
|
-
var length = array ? array.length : 0;
|
4708
|
-
predicate = getCallback(predicate, thisArg, 3);
|
4709
|
-
while (length--) {
|
4710
|
-
if (predicate(array[length], length, array)) {
|
4711
|
-
return length;
|
4712
|
-
}
|
4713
|
-
}
|
4714
|
-
return -1;
|
4715
|
-
}
|
4917
|
+
var findLastIndex = createFindIndex(true);
|
4716
4918
|
|
4717
4919
|
/**
|
4718
4920
|
* Gets the first element of `array`.
|
@@ -4749,18 +4951,18 @@
|
|
4749
4951
|
* @example
|
4750
4952
|
*
|
4751
4953
|
* _.flatten([1, [2, 3, [4]]]);
|
4752
|
-
* // => [1, 2, 3, [4]]
|
4954
|
+
* // => [1, 2, 3, [4]]
|
4753
4955
|
*
|
4754
4956
|
* // using `isDeep`
|
4755
4957
|
* _.flatten([1, [2, 3, [4]]], true);
|
4756
|
-
* // => [1, 2, 3, 4]
|
4958
|
+
* // => [1, 2, 3, 4]
|
4757
4959
|
*/
|
4758
4960
|
function flatten(array, isDeep, guard) {
|
4759
4961
|
var length = array ? array.length : 0;
|
4760
4962
|
if (guard && isIterateeCall(array, isDeep, guard)) {
|
4761
4963
|
isDeep = false;
|
4762
4964
|
}
|
4763
|
-
return length ? baseFlatten(array, isDeep
|
4965
|
+
return length ? baseFlatten(array, isDeep) : [];
|
4764
4966
|
}
|
4765
4967
|
|
4766
4968
|
/**
|
@@ -4774,11 +4976,11 @@
|
|
4774
4976
|
* @example
|
4775
4977
|
*
|
4776
4978
|
* _.flattenDeep([1, [2, 3, [4]]]);
|
4777
|
-
* // => [1, 2, 3, 4]
|
4979
|
+
* // => [1, 2, 3, 4]
|
4778
4980
|
*/
|
4779
4981
|
function flattenDeep(array) {
|
4780
4982
|
var length = array ? array.length : 0;
|
4781
|
-
return length ? baseFlatten(array, true
|
4983
|
+
return length ? baseFlatten(array, true) : [];
|
4782
4984
|
}
|
4783
4985
|
|
4784
4986
|
/**
|
@@ -4787,10 +4989,9 @@
|
|
4787
4989
|
* it is used as the offset from the end of `array`. If `array` is sorted
|
4788
4990
|
* providing `true` for `fromIndex` performs a faster binary search.
|
4789
4991
|
*
|
4790
|
-
* **Note:** `SameValueZero`
|
4791
|
-
* e.g. `===`, except that
|
4792
|
-
*
|
4793
|
-
* for more details.
|
4992
|
+
* **Note:** [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
|
4993
|
+
* comparisons are like strict equality comparisons, e.g. `===`, except that
|
4994
|
+
* `NaN` matches `NaN`.
|
4794
4995
|
*
|
4795
4996
|
* @static
|
4796
4997
|
* @memberOf _
|
@@ -4853,10 +5054,9 @@
|
|
4853
5054
|
* Creates an array of unique values in all provided arrays using `SameValueZero`
|
4854
5055
|
* for equality comparisons.
|
4855
5056
|
*
|
4856
|
-
* **Note:** `SameValueZero`
|
4857
|
-
* e.g. `===`, except that
|
4858
|
-
*
|
4859
|
-
* for more details.
|
5057
|
+
* **Note:** [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
|
5058
|
+
* comparisons are like strict equality comparisons, e.g. `===`, except that
|
5059
|
+
* `NaN` matches `NaN`.
|
4860
5060
|
*
|
4861
5061
|
* @static
|
4862
5062
|
* @memberOf _
|
@@ -4984,10 +5184,10 @@
|
|
4984
5184
|
* comparisons.
|
4985
5185
|
*
|
4986
5186
|
* **Notes:**
|
4987
|
-
* - Unlike `_.without`, this method mutates `array
|
4988
|
-
* - `SameValueZero`
|
4989
|
-
*
|
4990
|
-
*
|
5187
|
+
* - Unlike `_.without`, this method mutates `array`
|
5188
|
+
* - [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
|
5189
|
+
* comparisons are like strict equality comparisons, e.g. `===`, except
|
5190
|
+
* that `NaN` matches `NaN`
|
4991
5191
|
*
|
4992
5192
|
* @static
|
4993
5193
|
* @memberOf _
|
@@ -5050,14 +5250,28 @@
|
|
5050
5250
|
* console.log(evens);
|
5051
5251
|
* // => [10, 20]
|
5052
5252
|
*/
|
5053
|
-
|
5054
|
-
|
5055
|
-
|
5253
|
+
var pullAt = restParam(function(array, indexes) {
|
5254
|
+
array || (array = []);
|
5255
|
+
indexes = baseFlatten(indexes);
|
5256
|
+
|
5257
|
+
var length = indexes.length,
|
5258
|
+
result = baseAt(array, indexes);
|
5259
|
+
|
5260
|
+
indexes.sort(baseCompareAscending);
|
5261
|
+
while (length--) {
|
5262
|
+
var index = parseFloat(indexes[length]);
|
5263
|
+
if (index != previous && isIndex(index)) {
|
5264
|
+
var previous = index;
|
5265
|
+
splice.call(array, index, 1);
|
5266
|
+
}
|
5267
|
+
}
|
5268
|
+
return result;
|
5269
|
+
});
|
5056
5270
|
|
5057
5271
|
/**
|
5058
5272
|
* Removes all elements from `array` that `predicate` returns truthy for
|
5059
5273
|
* and returns an array of the removed elements. The predicate is bound to
|
5060
|
-
* `thisArg` and invoked with three arguments
|
5274
|
+
* `thisArg` and invoked with three arguments: (value, index, array).
|
5061
5275
|
*
|
5062
5276
|
* If a property name is provided for `predicate` the created `_.property`
|
5063
5277
|
* style callback returns the property value of the given element.
|
@@ -5161,14 +5375,14 @@
|
|
5161
5375
|
* to compute their sort ranking. The iteratee is bound to `thisArg` and
|
5162
5376
|
* invoked with one argument; (value).
|
5163
5377
|
*
|
5164
|
-
* If a property name is provided for `
|
5378
|
+
* If a property name is provided for `iteratee` the created `_.property`
|
5165
5379
|
* style callback returns the property value of the given element.
|
5166
5380
|
*
|
5167
5381
|
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
5168
5382
|
* style callback returns `true` for elements that have a matching property
|
5169
5383
|
* value, else `false`.
|
5170
5384
|
*
|
5171
|
-
* If an object is provided for `
|
5385
|
+
* If an object is provided for `iteratee` the created `_.matches` style
|
5172
5386
|
* callback returns `true` for elements that have the properties of the given
|
5173
5387
|
* object, else `false`.
|
5174
5388
|
*
|
@@ -5202,12 +5416,7 @@
|
|
5202
5416
|
* _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
|
5203
5417
|
* // => 1
|
5204
5418
|
*/
|
5205
|
-
|
5206
|
-
var func = getCallback(iteratee);
|
5207
|
-
return (func === baseCallback && iteratee == null)
|
5208
|
-
? binaryIndex(array, value)
|
5209
|
-
: binaryIndexBy(array, value, func(iteratee, thisArg, 1));
|
5210
|
-
}
|
5419
|
+
var sortedIndex = createSortedIndex();
|
5211
5420
|
|
5212
5421
|
/**
|
5213
5422
|
* This method is like `_.sortedIndex` except that it returns the highest
|
@@ -5229,12 +5438,7 @@
|
|
5229
5438
|
* _.sortedLastIndex([4, 4, 5, 5], 5);
|
5230
5439
|
* // => 4
|
5231
5440
|
*/
|
5232
|
-
|
5233
|
-
var func = getCallback(iteratee);
|
5234
|
-
return (func === baseCallback && iteratee == null)
|
5235
|
-
? binaryIndex(array, value, true)
|
5236
|
-
: binaryIndexBy(array, value, func(iteratee, thisArg, 1), true);
|
5237
|
-
}
|
5441
|
+
var sortedLastIndex = createSortedIndex(true);
|
5238
5442
|
|
5239
5443
|
/**
|
5240
5444
|
* Creates a slice of `array` with `n` elements taken from the beginning.
|
@@ -5310,7 +5514,7 @@
|
|
5310
5514
|
/**
|
5311
5515
|
* Creates a slice of `array` with elements taken from the end. Elements are
|
5312
5516
|
* taken until `predicate` returns falsey. The predicate is bound to `thisArg`
|
5313
|
-
* and invoked with three arguments
|
5517
|
+
* and invoked with three arguments: (value, index, array).
|
5314
5518
|
*
|
5315
5519
|
* If a property name is provided for `predicate` the created `_.property`
|
5316
5520
|
* style callback returns the property value of the given element.
|
@@ -5357,19 +5561,15 @@
|
|
5357
5561
|
* // => []
|
5358
5562
|
*/
|
5359
5563
|
function takeRightWhile(array, predicate, thisArg) {
|
5360
|
-
|
5361
|
-
|
5362
|
-
|
5363
|
-
}
|
5364
|
-
predicate = getCallback(predicate, thisArg, 3);
|
5365
|
-
while (length-- && predicate(array[length], length, array)) {}
|
5366
|
-
return baseSlice(array, length + 1);
|
5564
|
+
return (array && array.length)
|
5565
|
+
? baseWhile(array, getCallback(predicate, thisArg, 3), false, true)
|
5566
|
+
: [];
|
5367
5567
|
}
|
5368
5568
|
|
5369
5569
|
/**
|
5370
5570
|
* Creates a slice of `array` with elements taken from the beginning. Elements
|
5371
5571
|
* are taken until `predicate` returns falsey. The predicate is bound to
|
5372
|
-
* `thisArg` and invoked with three arguments
|
5572
|
+
* `thisArg` and invoked with three arguments: (value, index, array).
|
5373
5573
|
*
|
5374
5574
|
* If a property name is provided for `predicate` the created `_.property`
|
5375
5575
|
* style callback returns the property value of the given element.
|
@@ -5416,24 +5616,18 @@
|
|
5416
5616
|
* // => []
|
5417
5617
|
*/
|
5418
5618
|
function takeWhile(array, predicate, thisArg) {
|
5419
|
-
|
5420
|
-
|
5421
|
-
|
5422
|
-
}
|
5423
|
-
var index = -1;
|
5424
|
-
predicate = getCallback(predicate, thisArg, 3);
|
5425
|
-
while (++index < length && predicate(array[index], index, array)) {}
|
5426
|
-
return baseSlice(array, 0, index);
|
5619
|
+
return (array && array.length)
|
5620
|
+
? baseWhile(array, getCallback(predicate, thisArg, 3))
|
5621
|
+
: [];
|
5427
5622
|
}
|
5428
5623
|
|
5429
5624
|
/**
|
5430
5625
|
* Creates an array of unique values, in order, of the provided arrays using
|
5431
5626
|
* `SameValueZero` for equality comparisons.
|
5432
5627
|
*
|
5433
|
-
* **Note:** `SameValueZero`
|
5434
|
-
* e.g. `===`, except that
|
5435
|
-
*
|
5436
|
-
* for more details.
|
5628
|
+
* **Note:** [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
|
5629
|
+
* comparisons are like strict equality comparisons, e.g. `===`, except that
|
5630
|
+
* `NaN` matches `NaN`.
|
5437
5631
|
*
|
5438
5632
|
* @static
|
5439
5633
|
* @memberOf _
|
@@ -5445,9 +5639,9 @@
|
|
5445
5639
|
* _.union([1, 2], [4, 2], [2, 1]);
|
5446
5640
|
* // => [1, 2, 4]
|
5447
5641
|
*/
|
5448
|
-
|
5449
|
-
return baseUniq(baseFlatten(
|
5450
|
-
}
|
5642
|
+
var union = restParam(function(arrays) {
|
5643
|
+
return baseUniq(baseFlatten(arrays, false, true));
|
5644
|
+
});
|
5451
5645
|
|
5452
5646
|
/**
|
5453
5647
|
* Creates a duplicate-value-free version of an array using `SameValueZero`
|
@@ -5455,23 +5649,22 @@
|
|
5455
5649
|
* search algorithm for sorted arrays. If an iteratee function is provided it
|
5456
5650
|
* is invoked for each value in the array to generate the criterion by which
|
5457
5651
|
* uniqueness is computed. The `iteratee` is bound to `thisArg` and invoked
|
5458
|
-
* with three arguments
|
5652
|
+
* with three arguments: (value, index, array).
|
5459
5653
|
*
|
5460
|
-
* If a property name is provided for `
|
5654
|
+
* If a property name is provided for `iteratee` the created `_.property`
|
5461
5655
|
* style callback returns the property value of the given element.
|
5462
5656
|
*
|
5463
5657
|
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
5464
5658
|
* style callback returns `true` for elements that have a matching property
|
5465
5659
|
* value, else `false`.
|
5466
5660
|
*
|
5467
|
-
* If an object is provided for `
|
5661
|
+
* If an object is provided for `iteratee` the created `_.matches` style
|
5468
5662
|
* callback returns `true` for elements that have the properties of the given
|
5469
5663
|
* object, else `false`.
|
5470
5664
|
*
|
5471
|
-
* **Note:** `SameValueZero`
|
5472
|
-
* e.g. `===`, except that
|
5473
|
-
*
|
5474
|
-
* for more details.
|
5665
|
+
* **Note:** [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
|
5666
|
+
* comparisons are like strict equality comparisons, e.g. `===`, except that
|
5667
|
+
* `NaN` matches `NaN`.
|
5475
5668
|
*
|
5476
5669
|
* @static
|
5477
5670
|
* @memberOf _
|
@@ -5553,10 +5746,9 @@
|
|
5553
5746
|
* Creates an array excluding all provided values using `SameValueZero` for
|
5554
5747
|
* equality comparisons.
|
5555
5748
|
*
|
5556
|
-
* **Note:** `SameValueZero`
|
5557
|
-
* e.g. `===`, except that
|
5558
|
-
*
|
5559
|
-
* for more details.
|
5749
|
+
* **Note:** [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
|
5750
|
+
* comparisons are like strict equality comparisons, e.g. `===`, except that
|
5751
|
+
* `NaN` matches `NaN`.
|
5560
5752
|
*
|
5561
5753
|
* @static
|
5562
5754
|
* @memberOf _
|
@@ -5569,14 +5761,15 @@
|
|
5569
5761
|
* _.without([1, 2, 1, 3], 1, 2);
|
5570
5762
|
* // => [3]
|
5571
5763
|
*/
|
5572
|
-
|
5573
|
-
return
|
5574
|
-
|
5764
|
+
var without = restParam(function(array, values) {
|
5765
|
+
return (isArray(array) || isArguments(array))
|
5766
|
+
? baseDifference(array, values)
|
5767
|
+
: [];
|
5768
|
+
});
|
5575
5769
|
|
5576
5770
|
/**
|
5577
|
-
* Creates an array that is the symmetric difference
|
5578
|
-
*
|
5579
|
-
* more details.
|
5771
|
+
* Creates an array that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
|
5772
|
+
* of the provided arrays.
|
5580
5773
|
*
|
5581
5774
|
* @static
|
5582
5775
|
* @memberOf _
|
@@ -5618,20 +5811,13 @@
|
|
5618
5811
|
* _.zip(['fred', 'barney'], [30, 40], [true, false]);
|
5619
5812
|
* // => [['fred', 30, true], ['barney', 40, false]]
|
5620
5813
|
*/
|
5621
|
-
|
5622
|
-
var length = arguments.length,
|
5623
|
-
array = Array(length);
|
5624
|
-
|
5625
|
-
while (length--) {
|
5626
|
-
array[length] = arguments[length];
|
5627
|
-
}
|
5628
|
-
return unzip(array);
|
5629
|
-
}
|
5814
|
+
var zip = restParam(unzip);
|
5630
5815
|
|
5631
5816
|
/**
|
5632
|
-
*
|
5633
|
-
* either a single two dimensional array,
|
5634
|
-
* or two arrays, one of property names
|
5817
|
+
* The inverse of `_.pairs`; this method returns an object composed from arrays
|
5818
|
+
* of property names and values. Provide either a single two dimensional array,
|
5819
|
+
* e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names
|
5820
|
+
* and one of corresponding values.
|
5635
5821
|
*
|
5636
5822
|
* @static
|
5637
5823
|
* @memberOf _
|
@@ -5642,6 +5828,9 @@
|
|
5642
5828
|
* @returns {Object} Returns the new object.
|
5643
5829
|
* @example
|
5644
5830
|
*
|
5831
|
+
* _.zipObject([['fred', 30], ['barney', 40]]);
|
5832
|
+
* // => { 'fred': 30, 'barney': 40 }
|
5833
|
+
*
|
5645
5834
|
* _.zipObject(['fred', 'barney'], [30, 40]);
|
5646
5835
|
* // => { 'fred': 30, 'barney': 40 }
|
5647
5836
|
*/
|
@@ -5738,13 +5927,14 @@
|
|
5738
5927
|
* @returns {*} Returns the result of `interceptor`.
|
5739
5928
|
* @example
|
5740
5929
|
*
|
5741
|
-
* _(
|
5742
|
-
* .
|
5930
|
+
* _(' abc ')
|
5931
|
+
* .chain()
|
5932
|
+
* .trim()
|
5743
5933
|
* .thru(function(value) {
|
5744
5934
|
* return [value];
|
5745
5935
|
* })
|
5746
5936
|
* .value();
|
5747
|
-
* // => [
|
5937
|
+
* // => ['abc']
|
5748
5938
|
*/
|
5749
5939
|
function thru(value, interceptor, thisArg) {
|
5750
5940
|
return interceptor.call(thisArg, value);
|
@@ -5934,32 +6124,32 @@
|
|
5934
6124
|
* _.at(['a', 'b', 'c'], [0, 2]);
|
5935
6125
|
* // => ['a', 'c']
|
5936
6126
|
*
|
5937
|
-
* _.at(['
|
5938
|
-
* // => ['
|
6127
|
+
* _.at(['barney', 'fred', 'pebbles'], 0, 2);
|
6128
|
+
* // => ['barney', 'pebbles']
|
5939
6129
|
*/
|
5940
|
-
|
6130
|
+
var at = restParam(function(collection, props) {
|
5941
6131
|
var length = collection ? collection.length : 0;
|
5942
6132
|
if (isLength(length)) {
|
5943
6133
|
collection = toIterable(collection);
|
5944
6134
|
}
|
5945
|
-
return baseAt(collection, baseFlatten(
|
5946
|
-
}
|
6135
|
+
return baseAt(collection, baseFlatten(props));
|
6136
|
+
});
|
5947
6137
|
|
5948
6138
|
/**
|
5949
6139
|
* Creates an object composed of keys generated from the results of running
|
5950
6140
|
* each element of `collection` through `iteratee`. The corresponding value
|
5951
6141
|
* of each key is the number of times the key was returned by `iteratee`.
|
5952
|
-
* The `iteratee` is bound to `thisArg` and invoked with three arguments
|
6142
|
+
* The `iteratee` is bound to `thisArg` and invoked with three arguments:
|
5953
6143
|
* (value, index|key, collection).
|
5954
6144
|
*
|
5955
|
-
* If a property name is provided for `
|
6145
|
+
* If a property name is provided for `iteratee` the created `_.property`
|
5956
6146
|
* style callback returns the property value of the given element.
|
5957
6147
|
*
|
5958
6148
|
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
5959
6149
|
* style callback returns `true` for elements that have a matching property
|
5960
6150
|
* value, else `false`.
|
5961
6151
|
*
|
5962
|
-
* If an object is provided for `
|
6152
|
+
* If an object is provided for `iteratee` the created `_.matches` style
|
5963
6153
|
* callback returns `true` for elements that have the properties of the given
|
5964
6154
|
* object, else `false`.
|
5965
6155
|
*
|
@@ -5992,7 +6182,7 @@
|
|
5992
6182
|
|
5993
6183
|
/**
|
5994
6184
|
* Checks if `predicate` returns truthy for **all** elements of `collection`.
|
5995
|
-
* The predicate is bound to `thisArg` and invoked with three arguments
|
6185
|
+
* The predicate is bound to `thisArg` and invoked with three arguments:
|
5996
6186
|
* (value, index|key, collection).
|
5997
6187
|
*
|
5998
6188
|
* If a property name is provided for `predicate` the created `_.property`
|
@@ -6040,6 +6230,9 @@
|
|
6040
6230
|
*/
|
6041
6231
|
function every(collection, predicate, thisArg) {
|
6042
6232
|
var func = isArray(collection) ? arrayEvery : baseEvery;
|
6233
|
+
if (thisArg && isIterateeCall(collection, predicate, thisArg)) {
|
6234
|
+
predicate = null;
|
6235
|
+
}
|
6043
6236
|
if (typeof predicate != 'function' || typeof thisArg != 'undefined') {
|
6044
6237
|
predicate = getCallback(predicate, thisArg, 3);
|
6045
6238
|
}
|
@@ -6049,7 +6242,7 @@
|
|
6049
6242
|
/**
|
6050
6243
|
* Iterates over elements of `collection`, returning an array of all elements
|
6051
6244
|
* `predicate` returns truthy for. The predicate is bound to `thisArg` and
|
6052
|
-
* invoked with three arguments
|
6245
|
+
* invoked with three arguments: (value, index|key, collection).
|
6053
6246
|
*
|
6054
6247
|
* If a property name is provided for `predicate` the created `_.property`
|
6055
6248
|
* style callback returns the property value of the given element.
|
@@ -6104,7 +6297,7 @@
|
|
6104
6297
|
/**
|
6105
6298
|
* Iterates over elements of `collection`, returning the first element
|
6106
6299
|
* `predicate` returns truthy for. The predicate is bound to `thisArg` and
|
6107
|
-
* invoked with three arguments
|
6300
|
+
* invoked with three arguments: (value, index|key, collection).
|
6108
6301
|
*
|
6109
6302
|
* If a property name is provided for `predicate` the created `_.property`
|
6110
6303
|
* style callback returns the property value of the given element.
|
@@ -6151,14 +6344,7 @@
|
|
6151
6344
|
* _.result(_.find(users, 'active'), 'user');
|
6152
6345
|
* // => 'barney'
|
6153
6346
|
*/
|
6154
|
-
|
6155
|
-
if (isArray(collection)) {
|
6156
|
-
var index = findIndex(collection, predicate, thisArg);
|
6157
|
-
return index > -1 ? collection[index] : undefined;
|
6158
|
-
}
|
6159
|
-
predicate = getCallback(predicate, thisArg, 3);
|
6160
|
-
return baseFind(collection, predicate, baseEach);
|
6161
|
-
}
|
6347
|
+
var find = createFind(baseEach);
|
6162
6348
|
|
6163
6349
|
/**
|
6164
6350
|
* This method is like `_.find` except that it iterates over elements of
|
@@ -6179,10 +6365,7 @@
|
|
6179
6365
|
* });
|
6180
6366
|
* // => 3
|
6181
6367
|
*/
|
6182
|
-
|
6183
|
-
predicate = getCallback(predicate, thisArg, 3);
|
6184
|
-
return baseFind(collection, predicate, baseEachRight);
|
6185
|
-
}
|
6368
|
+
var findLast = createFind(baseEachRight, true);
|
6186
6369
|
|
6187
6370
|
/**
|
6188
6371
|
* Performs a deep comparison between each element in `collection` and the
|
@@ -6219,7 +6402,7 @@
|
|
6219
6402
|
|
6220
6403
|
/**
|
6221
6404
|
* Iterates over elements of `collection` invoking `iteratee` for each element.
|
6222
|
-
* The `iteratee` is bound to `thisArg` and invoked with three arguments
|
6405
|
+
* The `iteratee` is bound to `thisArg` and invoked with three arguments:
|
6223
6406
|
* (value, index|key, collection). Iterator functions may exit iteration early
|
6224
6407
|
* by explicitly returning `false`.
|
6225
6408
|
*
|
@@ -6247,11 +6430,7 @@
|
|
6247
6430
|
* });
|
6248
6431
|
* // => logs each value-key pair and returns the object (iteration order is not guaranteed)
|
6249
6432
|
*/
|
6250
|
-
|
6251
|
-
return (typeof iteratee == 'function' && typeof thisArg == 'undefined' && isArray(collection))
|
6252
|
-
? arrayEach(collection, iteratee)
|
6253
|
-
: baseEach(collection, bindCallback(iteratee, thisArg, 3));
|
6254
|
-
}
|
6433
|
+
var forEach = createForEach(arrayEach, baseEach);
|
6255
6434
|
|
6256
6435
|
/**
|
6257
6436
|
* This method is like `_.forEach` except that it iterates over elements of
|
@@ -6269,30 +6448,26 @@
|
|
6269
6448
|
*
|
6270
6449
|
* _([1, 2]).forEachRight(function(n) {
|
6271
6450
|
* console.log(n);
|
6272
|
-
* }).
|
6451
|
+
* }).value();
|
6273
6452
|
* // => logs each value from right to left and returns the array
|
6274
6453
|
*/
|
6275
|
-
|
6276
|
-
return (typeof iteratee == 'function' && typeof thisArg == 'undefined' && isArray(collection))
|
6277
|
-
? arrayEachRight(collection, iteratee)
|
6278
|
-
: baseEachRight(collection, bindCallback(iteratee, thisArg, 3));
|
6279
|
-
}
|
6454
|
+
var forEachRight = createForEach(arrayEachRight, baseEachRight);
|
6280
6455
|
|
6281
6456
|
/**
|
6282
6457
|
* Creates an object composed of keys generated from the results of running
|
6283
6458
|
* each element of `collection` through `iteratee`. The corresponding value
|
6284
6459
|
* of each key is an array of the elements responsible for generating the key.
|
6285
|
-
* The `iteratee` is bound to `thisArg` and invoked with three arguments
|
6460
|
+
* The `iteratee` is bound to `thisArg` and invoked with three arguments:
|
6286
6461
|
* (value, index|key, collection).
|
6287
6462
|
*
|
6288
|
-
* If a property name is provided for `
|
6463
|
+
* If a property name is provided for `iteratee` the created `_.property`
|
6289
6464
|
* style callback returns the property value of the given element.
|
6290
6465
|
*
|
6291
6466
|
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
6292
6467
|
* style callback returns `true` for elements that have a matching property
|
6293
6468
|
* value, else `false`.
|
6294
6469
|
*
|
6295
|
-
* If an object is provided for `
|
6470
|
+
* If an object is provided for `iteratee` the created `_.matches` style
|
6296
6471
|
* callback returns `true` for elements that have the properties of the given
|
6297
6472
|
* object, else `false`.
|
6298
6473
|
*
|
@@ -6333,10 +6508,9 @@
|
|
6333
6508
|
* comparisons. If `fromIndex` is negative, it is used as the offset from
|
6334
6509
|
* the end of `collection`.
|
6335
6510
|
*
|
6336
|
-
* **Note:** `SameValueZero`
|
6337
|
-
* e.g. `===`, except that
|
6338
|
-
*
|
6339
|
-
* for more details.
|
6511
|
+
* **Note:** [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
|
6512
|
+
* comparisons are like strict equality comparisons, e.g. `===`, except that
|
6513
|
+
* `NaN` matches `NaN`.
|
6340
6514
|
*
|
6341
6515
|
* @static
|
6342
6516
|
* @memberOf _
|
@@ -6345,6 +6519,7 @@
|
|
6345
6519
|
* @param {Array|Object|string} collection The collection to search.
|
6346
6520
|
* @param {*} target The value to search for.
|
6347
6521
|
* @param {number} [fromIndex=0] The index to search from.
|
6522
|
+
* @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.
|
6348
6523
|
* @returns {boolean} Returns `true` if a matching element is found, else `false`.
|
6349
6524
|
* @example
|
6350
6525
|
*
|
@@ -6360,7 +6535,7 @@
|
|
6360
6535
|
* _.includes('pebbles', 'eb');
|
6361
6536
|
* // => true
|
6362
6537
|
*/
|
6363
|
-
function includes(collection, target, fromIndex) {
|
6538
|
+
function includes(collection, target, fromIndex, guard) {
|
6364
6539
|
var length = collection ? collection.length : 0;
|
6365
6540
|
if (!isLength(length)) {
|
6366
6541
|
collection = values(collection);
|
@@ -6369,10 +6544,10 @@
|
|
6369
6544
|
if (!length) {
|
6370
6545
|
return false;
|
6371
6546
|
}
|
6372
|
-
if (typeof fromIndex
|
6373
|
-
fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);
|
6374
|
-
} else {
|
6547
|
+
if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {
|
6375
6548
|
fromIndex = 0;
|
6549
|
+
} else {
|
6550
|
+
fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);
|
6376
6551
|
}
|
6377
6552
|
return (typeof collection == 'string' || !isArray(collection) && isString(collection))
|
6378
6553
|
? (fromIndex < length && collection.indexOf(target, fromIndex) > -1)
|
@@ -6383,17 +6558,17 @@
|
|
6383
6558
|
* Creates an object composed of keys generated from the results of running
|
6384
6559
|
* each element of `collection` through `iteratee`. The corresponding value
|
6385
6560
|
* of each key is the last element responsible for generating the key. The
|
6386
|
-
* iteratee function is bound to `thisArg` and invoked with three arguments
|
6561
|
+
* iteratee function is bound to `thisArg` and invoked with three arguments:
|
6387
6562
|
* (value, index|key, collection).
|
6388
6563
|
*
|
6389
|
-
* If a property name is provided for `
|
6564
|
+
* If a property name is provided for `iteratee` the created `_.property`
|
6390
6565
|
* style callback returns the property value of the given element.
|
6391
6566
|
*
|
6392
6567
|
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
6393
6568
|
* style callback returns `true` for elements that have a matching property
|
6394
6569
|
* value, else `false`.
|
6395
6570
|
*
|
6396
|
-
* If an object is provided for `
|
6571
|
+
* If an object is provided for `iteratee` the created `_.matches` style
|
6397
6572
|
* callback returns `true` for elements that have the properties of the given
|
6398
6573
|
* object, else `false`.
|
6399
6574
|
*
|
@@ -6451,23 +6626,32 @@
|
|
6451
6626
|
* _.invoke([123, 456], String.prototype.split, '');
|
6452
6627
|
* // => [['1', '2', '3'], ['4', '5', '6']]
|
6453
6628
|
*/
|
6454
|
-
|
6455
|
-
|
6456
|
-
|
6629
|
+
var invoke = restParam(function(collection, methodName, args) {
|
6630
|
+
var index = -1,
|
6631
|
+
isFunc = typeof methodName == 'function',
|
6632
|
+
length = collection ? collection.length : 0,
|
6633
|
+
result = isLength(length) ? Array(length) : [];
|
6634
|
+
|
6635
|
+
baseEach(collection, function(value) {
|
6636
|
+
var func = isFunc ? methodName : (value != null && value[methodName]);
|
6637
|
+
result[++index] = func ? func.apply(value, args) : undefined;
|
6638
|
+
});
|
6639
|
+
return result;
|
6640
|
+
});
|
6457
6641
|
|
6458
6642
|
/**
|
6459
6643
|
* Creates an array of values by running each element in `collection` through
|
6460
6644
|
* `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three
|
6461
|
-
* arguments
|
6645
|
+
* arguments: (value, index|key, collection).
|
6462
6646
|
*
|
6463
|
-
* If a property name is provided for `
|
6647
|
+
* If a property name is provided for `iteratee` the created `_.property`
|
6464
6648
|
* style callback returns the property value of the given element.
|
6465
6649
|
*
|
6466
6650
|
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
6467
6651
|
* style callback returns `true` for elements that have a matching property
|
6468
6652
|
* value, else `false`.
|
6469
6653
|
*
|
6470
|
-
* If an object is provided for `
|
6654
|
+
* If an object is provided for `iteratee` the created `_.matches` style
|
6471
6655
|
* callback returns `true` for elements that have the properties of the given
|
6472
6656
|
* object, else `false`.
|
6473
6657
|
*
|
@@ -6476,9 +6660,9 @@
|
|
6476
6660
|
*
|
6477
6661
|
* The guarded methods are:
|
6478
6662
|
* `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`, `drop`,
|
6479
|
-
* `dropRight`, `fill`, `flatten`, `invert`, `max`, `min`, `parseInt`,
|
6480
|
-
* `sortBy`, `take`, `takeRight`, `template`, `trim`, `trimLeft`,
|
6481
|
-
* `trunc`, `random`, `range`, `sample`, `uniq`, and `words`
|
6663
|
+
* `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`, `parseInt`,
|
6664
|
+
* `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`, `trimLeft`,
|
6665
|
+
* `trimRight`, `trunc`, `random`, `range`, `sample`, `some`, `uniq`, and `words`
|
6482
6666
|
*
|
6483
6667
|
* @static
|
6484
6668
|
* @memberOf _
|
@@ -6521,7 +6705,7 @@
|
|
6521
6705
|
* Creates an array of elements split into two groups, the first of which
|
6522
6706
|
* contains elements `predicate` returns truthy for, while the second of which
|
6523
6707
|
* contains elements `predicate` returns falsey for. The predicate is bound
|
6524
|
-
* to `thisArg` and invoked with three arguments
|
6708
|
+
* to `thisArg` and invoked with three arguments: (value, index|key, collection).
|
6525
6709
|
*
|
6526
6710
|
* If a property name is provided for `predicate` the created `_.property`
|
6527
6711
|
* style callback returns the property value of the given element.
|
@@ -6612,14 +6796,14 @@
|
|
6612
6796
|
* each element in `collection` through `iteratee`, where each successive
|
6613
6797
|
* invocation is supplied the return value of the previous. If `accumulator`
|
6614
6798
|
* is not provided the first element of `collection` is used as the initial
|
6615
|
-
* value. The `iteratee` is bound to `thisArg`and invoked with four arguments
|
6799
|
+
* value. The `iteratee` is bound to `thisArg` and invoked with four arguments:
|
6616
6800
|
* (accumulator, value, index|key, collection).
|
6617
6801
|
*
|
6618
6802
|
* Many lodash methods are guarded to work as interatees for methods like
|
6619
6803
|
* `_.reduce`, `_.reduceRight`, and `_.transform`.
|
6620
6804
|
*
|
6621
6805
|
* The guarded methods are:
|
6622
|
-
* `assign`, `defaults`, `merge`, and `
|
6806
|
+
* `assign`, `defaults`, `includes`, `merge`, `sortByAll`, and `sortByOrder`
|
6623
6807
|
*
|
6624
6808
|
* @static
|
6625
6809
|
* @memberOf _
|
@@ -6643,10 +6827,7 @@
|
|
6643
6827
|
* }, {});
|
6644
6828
|
* // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed)
|
6645
6829
|
*/
|
6646
|
-
|
6647
|
-
var func = isArray(collection) ? arrayReduce : baseReduce;
|
6648
|
-
return func(collection, getCallback(iteratee, thisArg, 4), accumulator, arguments.length < 3, baseEach);
|
6649
|
-
}
|
6830
|
+
var reduce = createReduce(arrayReduce, baseEach);
|
6650
6831
|
|
6651
6832
|
/**
|
6652
6833
|
* This method is like `_.reduce` except that it iterates over elements of
|
@@ -6670,10 +6851,7 @@
|
|
6670
6851
|
* }, []);
|
6671
6852
|
* // => [4, 5, 2, 3, 0, 1]
|
6672
6853
|
*/
|
6673
|
-
|
6674
|
-
var func = isArray(collection) ? arrayReduceRight : baseReduce;
|
6675
|
-
return func(collection, getCallback(iteratee, thisArg, 4), accumulator, arguments.length < 3, baseEachRight);
|
6676
|
-
}
|
6854
|
+
var reduceRight = createReduce(arrayReduceRight, baseEachRight);
|
6677
6855
|
|
6678
6856
|
/**
|
6679
6857
|
* The opposite of `_.filter`; this method returns the elements of `collection`
|
@@ -6760,9 +6938,8 @@
|
|
6760
6938
|
}
|
6761
6939
|
|
6762
6940
|
/**
|
6763
|
-
* Creates an array of shuffled values, using a version of the
|
6764
|
-
* shuffle
|
6765
|
-
* for more details.
|
6941
|
+
* Creates an array of shuffled values, using a version of the
|
6942
|
+
* [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
|
6766
6943
|
*
|
6767
6944
|
* @static
|
6768
6945
|
* @memberOf _
|
@@ -6820,7 +6997,7 @@
|
|
6820
6997
|
* Checks if `predicate` returns truthy for **any** element of `collection`.
|
6821
6998
|
* The function returns as soon as it finds a passing value and does not iterate
|
6822
6999
|
* over the entire collection. The predicate is bound to `thisArg` and invoked
|
6823
|
-
* with three arguments
|
7000
|
+
* with three arguments: (value, index|key, collection).
|
6824
7001
|
*
|
6825
7002
|
* If a property name is provided for `predicate` the created `_.property`
|
6826
7003
|
* style callback returns the property value of the given element.
|
@@ -6867,6 +7044,9 @@
|
|
6867
7044
|
*/
|
6868
7045
|
function some(collection, predicate, thisArg) {
|
6869
7046
|
var func = isArray(collection) ? arraySome : baseSome;
|
7047
|
+
if (thisArg && isIterateeCall(collection, predicate, thisArg)) {
|
7048
|
+
predicate = null;
|
7049
|
+
}
|
6870
7050
|
if (typeof predicate != 'function' || typeof thisArg != 'undefined') {
|
6871
7051
|
predicate = getCallback(predicate, thisArg, 3);
|
6872
7052
|
}
|
@@ -6877,17 +7057,17 @@
|
|
6877
7057
|
* Creates an array of elements, sorted in ascending order by the results of
|
6878
7058
|
* running each element in a collection through `iteratee`. This method performs
|
6879
7059
|
* a stable sort, that is, it preserves the original sort order of equal elements.
|
6880
|
-
* The `iteratee` is bound to `thisArg` and invoked with three arguments
|
7060
|
+
* The `iteratee` is bound to `thisArg` and invoked with three arguments:
|
6881
7061
|
* (value, index|key, collection).
|
6882
7062
|
*
|
6883
|
-
* If a property name is provided for `
|
7063
|
+
* If a property name is provided for `iteratee` the created `_.property`
|
6884
7064
|
* style callback returns the property value of the given element.
|
6885
7065
|
*
|
6886
7066
|
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
6887
7067
|
* style callback returns `true` for elements that have a matching property
|
6888
7068
|
* value, else `false`.
|
6889
7069
|
*
|
6890
|
-
* If an object is provided for `
|
7070
|
+
* If an object is provided for `iteratee` the created `_.matches` style
|
6891
7071
|
* callback returns `true` for elements that have the properties of the given
|
6892
7072
|
* object, else `false`.
|
6893
7073
|
*
|
@@ -6963,17 +7143,24 @@
|
|
6963
7143
|
* _.map(_.sortByAll(users, ['user', 'age']), _.values);
|
6964
7144
|
* // => [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]]
|
6965
7145
|
*/
|
6966
|
-
function sortByAll(
|
7146
|
+
function sortByAll() {
|
7147
|
+
var args = arguments,
|
7148
|
+
collection = args[0],
|
7149
|
+
guard = args[3],
|
7150
|
+
index = 0,
|
7151
|
+
length = args.length - 1;
|
7152
|
+
|
6967
7153
|
if (collection == null) {
|
6968
7154
|
return [];
|
6969
7155
|
}
|
6970
|
-
var
|
6971
|
-
|
6972
|
-
|
7156
|
+
var props = Array(length);
|
7157
|
+
while (index < length) {
|
7158
|
+
props[index] = args[++index];
|
7159
|
+
}
|
6973
7160
|
if (guard && isIterateeCall(args[1], args[2], guard)) {
|
6974
|
-
|
7161
|
+
props = args[1];
|
6975
7162
|
}
|
6976
|
-
return baseSortByOrder(collection, baseFlatten(
|
7163
|
+
return baseSortByOrder(collection, baseFlatten(props), []);
|
6977
7164
|
}
|
6978
7165
|
|
6979
7166
|
/**
|
@@ -7192,7 +7379,7 @@
|
|
7192
7379
|
* @category Function
|
7193
7380
|
* @param {Function} func The function to bind.
|
7194
7381
|
* @param {*} thisArg The `this` binding of `func`.
|
7195
|
-
* @param {...*} [
|
7382
|
+
* @param {...*} [partials] The arguments to be partially applied.
|
7196
7383
|
* @returns {Function} Returns the new bound function.
|
7197
7384
|
* @example
|
7198
7385
|
*
|
@@ -7211,16 +7398,14 @@
|
|
7211
7398
|
* bound('hi');
|
7212
7399
|
* // => 'hi fred!'
|
7213
7400
|
*/
|
7214
|
-
|
7401
|
+
var bind = restParam(function(func, thisArg, partials) {
|
7215
7402
|
var bitmask = BIND_FLAG;
|
7216
|
-
if (
|
7217
|
-
var
|
7218
|
-
holders = replaceHolders(partials, bind.placeholder);
|
7219
|
-
|
7403
|
+
if (partials.length) {
|
7404
|
+
var holders = replaceHolders(partials, bind.placeholder);
|
7220
7405
|
bitmask |= PARTIAL_FLAG;
|
7221
7406
|
}
|
7222
7407
|
return createWrapper(func, bitmask, thisArg, partials, holders);
|
7223
|
-
}
|
7408
|
+
});
|
7224
7409
|
|
7225
7410
|
/**
|
7226
7411
|
* Binds methods of an object to the object itself, overwriting the existing
|
@@ -7250,13 +7435,18 @@
|
|
7250
7435
|
* jQuery('#docs').on('click', view.onClick);
|
7251
7436
|
* // => logs 'clicked docs' when the element is clicked
|
7252
7437
|
*/
|
7253
|
-
|
7254
|
-
|
7255
|
-
|
7256
|
-
|
7257
|
-
|
7258
|
-
|
7259
|
-
|
7438
|
+
var bindAll = restParam(function(object, methodNames) {
|
7439
|
+
methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object);
|
7440
|
+
|
7441
|
+
var index = -1,
|
7442
|
+
length = methodNames.length;
|
7443
|
+
|
7444
|
+
while (++index < length) {
|
7445
|
+
var key = methodNames[index];
|
7446
|
+
object[key] = createWrapper(object[key], BIND_FLAG, object);
|
7447
|
+
}
|
7448
|
+
return object;
|
7449
|
+
});
|
7260
7450
|
|
7261
7451
|
/**
|
7262
7452
|
* Creates a function that invokes the method at `object[key]` and prepends
|
@@ -7275,7 +7465,7 @@
|
|
7275
7465
|
* @category Function
|
7276
7466
|
* @param {Object} object The object the method belongs to.
|
7277
7467
|
* @param {string} key The key of the method.
|
7278
|
-
* @param {...*} [
|
7468
|
+
* @param {...*} [partials] The arguments to be partially applied.
|
7279
7469
|
* @returns {Function} Returns the new bound function.
|
7280
7470
|
* @example
|
7281
7471
|
*
|
@@ -7302,16 +7492,14 @@
|
|
7302
7492
|
* bound('hi');
|
7303
7493
|
* // => 'hiya fred!'
|
7304
7494
|
*/
|
7305
|
-
|
7495
|
+
var bindKey = restParam(function(object, key, partials) {
|
7306
7496
|
var bitmask = BIND_FLAG | BIND_KEY_FLAG;
|
7307
|
-
if (
|
7308
|
-
var
|
7309
|
-
holders = replaceHolders(partials, bindKey.placeholder);
|
7310
|
-
|
7497
|
+
if (partials.length) {
|
7498
|
+
var holders = replaceHolders(partials, bindKey.placeholder);
|
7311
7499
|
bitmask |= PARTIAL_FLAG;
|
7312
7500
|
}
|
7313
7501
|
return createWrapper(key, bitmask, object, partials, holders);
|
7314
|
-
}
|
7502
|
+
});
|
7315
7503
|
|
7316
7504
|
/**
|
7317
7505
|
* Creates a function that accepts one or more arguments of `func` that when
|
@@ -7353,14 +7541,7 @@
|
|
7353
7541
|
* curried(1)(_, 3)(2);
|
7354
7542
|
* // => [1, 2, 3]
|
7355
7543
|
*/
|
7356
|
-
|
7357
|
-
if (guard && isIterateeCall(func, arity, guard)) {
|
7358
|
-
arity = null;
|
7359
|
-
}
|
7360
|
-
var result = createWrapper(func, CURRY_FLAG, null, null, null, null, null, arity);
|
7361
|
-
result.placeholder = curry.placeholder;
|
7362
|
-
return result;
|
7363
|
-
}
|
7544
|
+
var curry = createCurry(CURRY_FLAG);
|
7364
7545
|
|
7365
7546
|
/**
|
7366
7547
|
* This method is like `_.curry` except that arguments are applied to `func`
|
@@ -7399,14 +7580,7 @@
|
|
7399
7580
|
* curried(3)(1, _)(2);
|
7400
7581
|
* // => [1, 2, 3]
|
7401
7582
|
*/
|
7402
|
-
|
7403
|
-
if (guard && isIterateeCall(func, arity, guard)) {
|
7404
|
-
arity = null;
|
7405
|
-
}
|
7406
|
-
var result = createWrapper(func, CURRY_RIGHT_FLAG, null, null, null, null, null, arity);
|
7407
|
-
result.placeholder = curryRight.placeholder;
|
7408
|
-
return result;
|
7409
|
-
}
|
7583
|
+
var curryRight = createCurry(CURRY_RIGHT_FLAG);
|
7410
7584
|
|
7411
7585
|
/**
|
7412
7586
|
* Creates a function that delays invoking `func` until after `wait` milliseconds
|
@@ -7601,9 +7775,9 @@
|
|
7601
7775
|
* }, 'deferred');
|
7602
7776
|
* // logs 'deferred' after one or more milliseconds
|
7603
7777
|
*/
|
7604
|
-
|
7605
|
-
return baseDelay(func, 1,
|
7606
|
-
}
|
7778
|
+
var defer = restParam(function(func, args) {
|
7779
|
+
return baseDelay(func, 1, args);
|
7780
|
+
});
|
7607
7781
|
|
7608
7782
|
/**
|
7609
7783
|
* Invokes `func` after `wait` milliseconds. Any additional arguments are
|
@@ -7623,9 +7797,9 @@
|
|
7623
7797
|
* }, 1000, 'later');
|
7624
7798
|
* // => logs 'later' after one second
|
7625
7799
|
*/
|
7626
|
-
|
7627
|
-
return baseDelay(func, wait,
|
7628
|
-
}
|
7800
|
+
var delay = restParam(function(func, wait, args) {
|
7801
|
+
return baseDelay(func, wait, args);
|
7802
|
+
});
|
7629
7803
|
|
7630
7804
|
/**
|
7631
7805
|
* Creates a function that returns the result of invoking the provided
|
@@ -7647,7 +7821,7 @@
|
|
7647
7821
|
* addSquare(1, 2);
|
7648
7822
|
* // => 9
|
7649
7823
|
*/
|
7650
|
-
var flow =
|
7824
|
+
var flow = createFlow();
|
7651
7825
|
|
7652
7826
|
/**
|
7653
7827
|
* This method is like `_.flow` except that it creates a function that
|
@@ -7669,7 +7843,7 @@
|
|
7669
7843
|
* addSquare(1, 2);
|
7670
7844
|
* // => 9
|
7671
7845
|
*/
|
7672
|
-
var flowRight =
|
7846
|
+
var flowRight = createFlow(true);
|
7673
7847
|
|
7674
7848
|
/**
|
7675
7849
|
* Creates a function that memoizes the result of `func`. If `resolver` is
|
@@ -7681,10 +7855,8 @@
|
|
7681
7855
|
*
|
7682
7856
|
* **Note:** The cache is exposed as the `cache` property on the memoized
|
7683
7857
|
* function. Its creation may be customized by replacing the `_.memoize.Cache`
|
7684
|
-
* constructor with one whose instances implement the
|
7685
|
-
* of `get`, `has`, and `set`.
|
7686
|
-
* [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-properties-of-the-map-prototype-object)
|
7687
|
-
* for more details.
|
7858
|
+
* constructor with one whose instances implement the [`Map`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-properties-of-the-map-prototype-object)
|
7859
|
+
* method interface of `get`, `has`, and `set`.
|
7688
7860
|
*
|
7689
7861
|
* @static
|
7690
7862
|
* @memberOf _
|
@@ -7775,7 +7947,7 @@
|
|
7775
7947
|
/**
|
7776
7948
|
* Creates a function that is restricted to invoking `func` once. Repeat calls
|
7777
7949
|
* to the function return the value of the first call. The `func` is invoked
|
7778
|
-
* with the `this` binding of the created function.
|
7950
|
+
* with the `this` binding and arguments of the created function.
|
7779
7951
|
*
|
7780
7952
|
* @static
|
7781
7953
|
* @memberOf _
|
@@ -7808,7 +7980,7 @@
|
|
7808
7980
|
* @memberOf _
|
7809
7981
|
* @category Function
|
7810
7982
|
* @param {Function} func The function to partially apply arguments to.
|
7811
|
-
* @param {...*} [
|
7983
|
+
* @param {...*} [partials] The arguments to be partially applied.
|
7812
7984
|
* @returns {Function} Returns the new partially applied function.
|
7813
7985
|
* @example
|
7814
7986
|
*
|
@@ -7825,12 +7997,7 @@
|
|
7825
7997
|
* greetFred('hi');
|
7826
7998
|
* // => 'hi fred'
|
7827
7999
|
*/
|
7828
|
-
|
7829
|
-
var partials = baseSlice(arguments, 1),
|
7830
|
-
holders = replaceHolders(partials, partial.placeholder);
|
7831
|
-
|
7832
|
-
return createWrapper(func, PARTIAL_FLAG, null, partials, holders);
|
7833
|
-
}
|
8000
|
+
var partial = createPartial(PARTIAL_FLAG);
|
7834
8001
|
|
7835
8002
|
/**
|
7836
8003
|
* This method is like `_.partial` except that partially applied arguments
|
@@ -7846,7 +8013,7 @@
|
|
7846
8013
|
* @memberOf _
|
7847
8014
|
* @category Function
|
7848
8015
|
* @param {Function} func The function to partially apply arguments to.
|
7849
|
-
* @param {...*} [
|
8016
|
+
* @param {...*} [partials] The arguments to be partially applied.
|
7850
8017
|
* @returns {Function} Returns the new partially applied function.
|
7851
8018
|
* @example
|
7852
8019
|
*
|
@@ -7863,12 +8030,7 @@
|
|
7863
8030
|
* sayHelloTo('fred');
|
7864
8031
|
* // => 'hello fred'
|
7865
8032
|
*/
|
7866
|
-
|
7867
|
-
var partials = baseSlice(arguments, 1),
|
7868
|
-
holders = replaceHolders(partials, partialRight.placeholder);
|
7869
|
-
|
7870
|
-
return createWrapper(func, PARTIAL_RIGHT_FLAG, null, partials, holders);
|
7871
|
-
}
|
8033
|
+
var partialRight = createPartial(PARTIAL_RIGHT_FLAG);
|
7872
8034
|
|
7873
8035
|
/**
|
7874
8036
|
* Creates a function that invokes `func` with arguments arranged according
|
@@ -7898,29 +8060,80 @@
|
|
7898
8060
|
* }, [1, 2, 3]);
|
7899
8061
|
* // => [3, 6, 9]
|
7900
8062
|
*/
|
7901
|
-
|
7902
|
-
|
7903
|
-
|
7904
|
-
}
|
8063
|
+
var rearg = restParam(function(func, indexes) {
|
8064
|
+
return createWrapper(func, REARG_FLAG, null, null, null, baseFlatten(indexes));
|
8065
|
+
});
|
7905
8066
|
|
7906
8067
|
/**
|
7907
8068
|
* Creates a function that invokes `func` with the `this` binding of the
|
7908
|
-
* created function and
|
7909
|
-
*
|
8069
|
+
* created function and arguments from `start` and beyond provided as an array.
|
8070
|
+
*
|
8071
|
+
* **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).
|
8072
|
+
*
|
8073
|
+
* @static
|
8074
|
+
* @memberOf _
|
8075
|
+
* @category Function
|
8076
|
+
* @param {Function} func The function to apply a rest parameter to.
|
8077
|
+
* @param {number} [start=func.length-1] The start position of the rest parameter.
|
8078
|
+
* @returns {Function} Returns the new function.
|
8079
|
+
* @example
|
8080
|
+
*
|
8081
|
+
* var say = _.restParam(function(what, names) {
|
8082
|
+
* return what + ' ' + _.initial(names).join(', ') +
|
8083
|
+
* (_.size(names) > 1 ? ', & ' : '') + _.last(names);
|
8084
|
+
* });
|
8085
|
+
*
|
8086
|
+
* say('hello', 'fred', 'barney', 'pebbles');
|
8087
|
+
* // => 'hello fred, barney, & pebbles'
|
8088
|
+
*/
|
8089
|
+
function restParam(func, start) {
|
8090
|
+
if (typeof func != 'function') {
|
8091
|
+
throw new TypeError(FUNC_ERROR_TEXT);
|
8092
|
+
}
|
8093
|
+
start = nativeMax(typeof start == 'undefined' ? (func.length - 1) : (+start || 0), 0);
|
8094
|
+
return function() {
|
8095
|
+
var args = arguments,
|
8096
|
+
index = -1,
|
8097
|
+
length = nativeMax(args.length - start, 0),
|
8098
|
+
rest = Array(length);
|
8099
|
+
|
8100
|
+
while (++index < length) {
|
8101
|
+
rest[index] = args[start + index];
|
8102
|
+
}
|
8103
|
+
switch (start) {
|
8104
|
+
case 0: return func.call(this, rest);
|
8105
|
+
case 1: return func.call(this, args[0], rest);
|
8106
|
+
case 2: return func.call(this, args[0], args[1], rest);
|
8107
|
+
}
|
8108
|
+
var otherArgs = Array(start + 1);
|
8109
|
+
index = -1;
|
8110
|
+
while (++index < start) {
|
8111
|
+
otherArgs[index] = args[index];
|
8112
|
+
}
|
8113
|
+
otherArgs[start] = rest;
|
8114
|
+
return func.apply(this, otherArgs);
|
8115
|
+
};
|
8116
|
+
}
|
8117
|
+
|
8118
|
+
/**
|
8119
|
+
* Creates a function that invokes `func` with the `this` binding of the created
|
8120
|
+
* function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3).
|
8121
|
+
*
|
8122
|
+
* **Note:** This method is based on the [spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator).
|
7910
8123
|
*
|
7911
8124
|
* @static
|
7912
8125
|
* @memberOf _
|
7913
8126
|
* @category Function
|
7914
8127
|
* @param {Function} func The function to spread arguments over.
|
7915
|
-
* @returns {
|
8128
|
+
* @returns {Function} Returns the new function.
|
7916
8129
|
* @example
|
7917
8130
|
*
|
7918
|
-
* var
|
8131
|
+
* var say = _.spread(function(who, what) {
|
7919
8132
|
* return who + ' says ' + what;
|
7920
8133
|
* });
|
7921
8134
|
*
|
7922
|
-
*
|
7923
|
-
* // => '
|
8135
|
+
* say(['fred', 'hello']);
|
8136
|
+
* // => 'fred says hello'
|
7924
8137
|
*
|
7925
8138
|
* // with a Promise
|
7926
8139
|
* var numbers = Promise.all([
|
@@ -8035,12 +8248,12 @@
|
|
8035
8248
|
* cloning is handled by the method instead. The `customizer` is bound to
|
8036
8249
|
* `thisArg` and invoked with two argument; (value [, index|key, object]).
|
8037
8250
|
*
|
8038
|
-
* **Note:** This method is loosely based on the
|
8251
|
+
* **Note:** This method is loosely based on the
|
8252
|
+
* [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).
|
8039
8253
|
* The enumerable properties of `arguments` objects and objects created by
|
8040
8254
|
* constructors other than `Object` are cloned to plain `Object` objects. An
|
8041
8255
|
* empty object is returned for uncloneable values such as functions, DOM nodes,
|
8042
|
-
* Maps, Sets, and WeakMaps.
|
8043
|
-
* for more details.
|
8256
|
+
* Maps, Sets, and WeakMaps.
|
8044
8257
|
*
|
8045
8258
|
* @static
|
8046
8259
|
* @memberOf _
|
@@ -8098,12 +8311,12 @@
|
|
8098
8311
|
* is handled by the method instead. The `customizer` is bound to `thisArg`
|
8099
8312
|
* and invoked with two argument; (value [, index|key, object]).
|
8100
8313
|
*
|
8101
|
-
* **Note:** This method is loosely based on the
|
8314
|
+
* **Note:** This method is loosely based on the
|
8315
|
+
* [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).
|
8102
8316
|
* The enumerable properties of `arguments` objects and objects created by
|
8103
8317
|
* constructors other than `Object` are cloned to plain `Object` objects. An
|
8104
8318
|
* empty object is returned for uncloneable values such as functions, DOM nodes,
|
8105
|
-
* Maps, Sets, and WeakMaps.
|
8106
|
-
* for more details.
|
8319
|
+
* Maps, Sets, and WeakMaps.
|
8107
8320
|
*
|
8108
8321
|
* @static
|
8109
8322
|
* @memberOf _
|
@@ -8160,14 +8373,14 @@
|
|
8160
8373
|
*/
|
8161
8374
|
function isArguments(value) {
|
8162
8375
|
var length = isObjectLike(value) ? value.length : undefined;
|
8163
|
-
return
|
8376
|
+
return isLength(length) && objToString.call(value) == argsTag;
|
8164
8377
|
}
|
8165
8378
|
// Fallback for environments without a `toStringTag` for `arguments` objects.
|
8166
8379
|
if (!support.argsTag) {
|
8167
8380
|
isArguments = function(value) {
|
8168
8381
|
var length = isObjectLike(value) ? value.length : undefined;
|
8169
|
-
return
|
8170
|
-
!propertyIsEnumerable.call(value, 'callee')
|
8382
|
+
return isLength(length) && hasOwnProperty.call(value, 'callee') &&
|
8383
|
+
!propertyIsEnumerable.call(value, 'callee');
|
8171
8384
|
};
|
8172
8385
|
}
|
8173
8386
|
|
@@ -8188,7 +8401,7 @@
|
|
8188
8401
|
* // => false
|
8189
8402
|
*/
|
8190
8403
|
var isArray = nativeIsArray || function(value) {
|
8191
|
-
return
|
8404
|
+
return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
|
8192
8405
|
};
|
8193
8406
|
|
8194
8407
|
/**
|
@@ -8208,7 +8421,7 @@
|
|
8208
8421
|
* // => false
|
8209
8422
|
*/
|
8210
8423
|
function isBoolean(value) {
|
8211
|
-
return
|
8424
|
+
return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag);
|
8212
8425
|
}
|
8213
8426
|
|
8214
8427
|
/**
|
@@ -8228,7 +8441,7 @@
|
|
8228
8441
|
* // => false
|
8229
8442
|
*/
|
8230
8443
|
function isDate(value) {
|
8231
|
-
return
|
8444
|
+
return isObjectLike(value) && objToString.call(value) == dateTag;
|
8232
8445
|
}
|
8233
8446
|
|
8234
8447
|
/**
|
@@ -8248,13 +8461,13 @@
|
|
8248
8461
|
* // => false
|
8249
8462
|
*/
|
8250
8463
|
function isElement(value) {
|
8251
|
-
return
|
8252
|
-
(lodash.support.nodeTag ? (objToString.call(value).indexOf('Element') > -1) : isHostObject(value))
|
8464
|
+
return !!value && value.nodeType === 1 && isObjectLike(value) &&
|
8465
|
+
(lodash.support.nodeTag ? (objToString.call(value).indexOf('Element') > -1) : isHostObject(value));
|
8253
8466
|
}
|
8254
8467
|
// Fallback for environments without DOM support.
|
8255
8468
|
if (!support.dom) {
|
8256
8469
|
isElement = function(value) {
|
8257
|
-
return
|
8470
|
+
return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);
|
8258
8471
|
};
|
8259
8472
|
}
|
8260
8473
|
|
@@ -8302,7 +8515,7 @@
|
|
8302
8515
|
* equivalent. If `customizer` is provided it is invoked to compare values.
|
8303
8516
|
* If `customizer` returns `undefined` comparisons are handled by the method
|
8304
8517
|
* instead. The `customizer` is bound to `thisArg` and invoked with three
|
8305
|
-
* arguments
|
8518
|
+
* arguments: (value, other [, index|key]).
|
8306
8519
|
*
|
8307
8520
|
* **Note:** This method supports comparing arrays, booleans, `Date` objects,
|
8308
8521
|
* numbers, `Object` objects, regexes, and strings. Objects are compared by
|
@@ -8367,15 +8580,13 @@
|
|
8367
8580
|
* // => false
|
8368
8581
|
*/
|
8369
8582
|
function isError(value) {
|
8370
|
-
return
|
8583
|
+
return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag;
|
8371
8584
|
}
|
8372
8585
|
|
8373
8586
|
/**
|
8374
8587
|
* Checks if `value` is a finite primitive number.
|
8375
8588
|
*
|
8376
|
-
* **Note:** This method is based on
|
8377
|
-
* [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isfinite)
|
8378
|
-
* for more details.
|
8589
|
+
* **Note:** This method is based on [`Number.isFinite`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isfinite).
|
8379
8590
|
*
|
8380
8591
|
* @static
|
8381
8592
|
* @memberOf _
|
@@ -8427,11 +8638,9 @@
|
|
8427
8638
|
};
|
8428
8639
|
|
8429
8640
|
/**
|
8430
|
-
* Checks if `value` is the language type of `Object`.
|
8641
|
+
* Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
|
8431
8642
|
* (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
|
8432
8643
|
*
|
8433
|
-
* **Note:** See the [ES5 spec](https://es5.github.io/#x8) for more details.
|
8434
|
-
*
|
8435
8644
|
* @static
|
8436
8645
|
* @memberOf _
|
8437
8646
|
* @category Lang
|
@@ -8452,7 +8661,7 @@
|
|
8452
8661
|
// Avoid a V8 JIT bug in Chrome 19-20.
|
8453
8662
|
// See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
|
8454
8663
|
var type = typeof value;
|
8455
|
-
return type == 'function' || (value && type == 'object')
|
8664
|
+
return type == 'function' || (!!value && type == 'object');
|
8456
8665
|
}
|
8457
8666
|
|
8458
8667
|
/**
|
@@ -8460,7 +8669,7 @@
|
|
8460
8669
|
* `object` contains equivalent property values. If `customizer` is provided
|
8461
8670
|
* it is invoked to compare values. If `customizer` returns `undefined`
|
8462
8671
|
* comparisons are handled by the method instead. The `customizer` is bound
|
8463
|
-
* to `thisArg` and invoked with three arguments
|
8672
|
+
* to `thisArg` and invoked with three arguments: (value, other, index|key).
|
8464
8673
|
*
|
8465
8674
|
* **Note:** This method supports comparing properties of arrays, booleans,
|
8466
8675
|
* `Date` objects, numbers, `Object` objects, regexes, and strings. Functions
|
@@ -8498,13 +8707,19 @@
|
|
8498
8707
|
var props = keys(source),
|
8499
8708
|
length = props.length;
|
8500
8709
|
|
8710
|
+
if (!length) {
|
8711
|
+
return true;
|
8712
|
+
}
|
8713
|
+
if (object == null) {
|
8714
|
+
return false;
|
8715
|
+
}
|
8501
8716
|
customizer = typeof customizer == 'function' && bindCallback(customizer, thisArg, 3);
|
8502
8717
|
if (!customizer && length == 1) {
|
8503
8718
|
var key = props[0],
|
8504
8719
|
value = source[key];
|
8505
8720
|
|
8506
8721
|
if (isStrictComparable(value)) {
|
8507
|
-
return
|
8722
|
+
return value === object[key] && (typeof value != 'undefined' || (key in toObject(object)));
|
8508
8723
|
}
|
8509
8724
|
}
|
8510
8725
|
var values = Array(length),
|
@@ -8514,15 +8729,14 @@
|
|
8514
8729
|
value = values[length] = source[props[length]];
|
8515
8730
|
strictCompareFlags[length] = isStrictComparable(value);
|
8516
8731
|
}
|
8517
|
-
return baseIsMatch(object, props, values, strictCompareFlags, customizer);
|
8732
|
+
return baseIsMatch(toObject(object), props, values, strictCompareFlags, customizer);
|
8518
8733
|
}
|
8519
8734
|
|
8520
8735
|
/**
|
8521
8736
|
* Checks if `value` is `NaN`.
|
8522
8737
|
*
|
8523
|
-
* **Note:** This method is not the same as
|
8524
|
-
* for `undefined` and other non-numeric values.
|
8525
|
-
* for more details.
|
8738
|
+
* **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4)
|
8739
|
+
* which returns `true` for `undefined` and other non-numeric values.
|
8526
8740
|
*
|
8527
8741
|
* @static
|
8528
8742
|
* @memberOf _
|
@@ -8572,8 +8786,7 @@
|
|
8572
8786
|
if (objToString.call(value) == funcTag) {
|
8573
8787
|
return reNative.test(fnToString.call(value));
|
8574
8788
|
}
|
8575
|
-
return
|
8576
|
-
(isHostObject(value) ? reNative : reHostCtor).test(value)) || false;
|
8789
|
+
return isObjectLike(value) && (isHostObject(value) ? reNative : reHostCtor).test(value);
|
8577
8790
|
}
|
8578
8791
|
|
8579
8792
|
/**
|
@@ -8619,7 +8832,7 @@
|
|
8619
8832
|
* // => false
|
8620
8833
|
*/
|
8621
8834
|
function isNumber(value) {
|
8622
|
-
return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag)
|
8835
|
+
return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);
|
8623
8836
|
}
|
8624
8837
|
|
8625
8838
|
/**
|
@@ -8681,7 +8894,7 @@
|
|
8681
8894
|
* // => false
|
8682
8895
|
*/
|
8683
8896
|
function isRegExp(value) {
|
8684
|
-
return
|
8897
|
+
return isObject(value) && objToString.call(value) == regexpTag;
|
8685
8898
|
}
|
8686
8899
|
|
8687
8900
|
/**
|
@@ -8701,7 +8914,7 @@
|
|
8701
8914
|
* // => false
|
8702
8915
|
*/
|
8703
8916
|
function isString(value) {
|
8704
|
-
return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag)
|
8917
|
+
return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);
|
8705
8918
|
}
|
8706
8919
|
|
8707
8920
|
/**
|
@@ -8721,7 +8934,7 @@
|
|
8721
8934
|
* // => false
|
8722
8935
|
*/
|
8723
8936
|
function isTypedArray(value) {
|
8724
|
-
return
|
8937
|
+
return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];
|
8725
8938
|
}
|
8726
8939
|
|
8727
8940
|
/**
|
@@ -8805,7 +9018,7 @@
|
|
8805
9018
|
* Assigns own enumerable properties of source object(s) to the destination
|
8806
9019
|
* object. Subsequent sources overwrite property assignments of previous sources.
|
8807
9020
|
* If `customizer` is provided it is invoked to produce the assigned values.
|
8808
|
-
* The `customizer` is bound to `thisArg` and invoked with five arguments
|
9021
|
+
* The `customizer` is bound to `thisArg` and invoked with five arguments:
|
8809
9022
|
* (objectValue, sourceValue, key, object, source).
|
8810
9023
|
*
|
8811
9024
|
* @static
|
@@ -8890,18 +9103,18 @@
|
|
8890
9103
|
* _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
|
8891
9104
|
* // => { 'user': 'barney', 'age': 36 }
|
8892
9105
|
*/
|
8893
|
-
|
9106
|
+
var defaults = restParam(function(args) {
|
9107
|
+
var object = args[0];
|
8894
9108
|
if (object == null) {
|
8895
9109
|
return object;
|
8896
9110
|
}
|
8897
|
-
var args = arrayCopy(arguments);
|
8898
9111
|
args.push(assignDefaults);
|
8899
9112
|
return assign.apply(undefined, args);
|
8900
|
-
}
|
9113
|
+
});
|
8901
9114
|
|
8902
9115
|
/**
|
8903
|
-
* This method is like `_.
|
8904
|
-
*
|
9116
|
+
* This method is like `_.find` except that it returns the key of the first
|
9117
|
+
* element `predicate` returns truthy for instead of the element itself.
|
8905
9118
|
*
|
8906
9119
|
* If a property name is provided for `predicate` the created `_.property`
|
8907
9120
|
* style callback returns the property value of the given element.
|
@@ -8947,10 +9160,7 @@
|
|
8947
9160
|
* _.findKey(users, 'active');
|
8948
9161
|
* // => 'barney'
|
8949
9162
|
*/
|
8950
|
-
|
8951
|
-
predicate = getCallback(predicate, thisArg, 3);
|
8952
|
-
return baseFind(object, predicate, baseForOwn, true);
|
8953
|
-
}
|
9163
|
+
var findKey = createFindKey(baseForOwn);
|
8954
9164
|
|
8955
9165
|
/**
|
8956
9166
|
* This method is like `_.findKey` except that it iterates over elements of
|
@@ -9000,15 +9210,12 @@
|
|
9000
9210
|
* _.findLastKey(users, 'active');
|
9001
9211
|
* // => 'pebbles'
|
9002
9212
|
*/
|
9003
|
-
|
9004
|
-
predicate = getCallback(predicate, thisArg, 3);
|
9005
|
-
return baseFind(object, predicate, baseForOwnRight, true);
|
9006
|
-
}
|
9213
|
+
var findLastKey = createFindKey(baseForOwnRight);
|
9007
9214
|
|
9008
9215
|
/**
|
9009
9216
|
* Iterates over own and inherited enumerable properties of an object invoking
|
9010
9217
|
* `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked
|
9011
|
-
* with three arguments
|
9218
|
+
* with three arguments: (value, key, object). Iterator functions may exit
|
9012
9219
|
* iteration early by explicitly returning `false`.
|
9013
9220
|
*
|
9014
9221
|
* @static
|
@@ -9032,12 +9239,7 @@
|
|
9032
9239
|
* });
|
9033
9240
|
* // => logs 'a', 'b', and 'c' (iteration order is not guaranteed)
|
9034
9241
|
*/
|
9035
|
-
|
9036
|
-
if (typeof iteratee != 'function' || typeof thisArg != 'undefined') {
|
9037
|
-
iteratee = bindCallback(iteratee, thisArg, 3);
|
9038
|
-
}
|
9039
|
-
return baseFor(object, iteratee, keysIn);
|
9040
|
-
}
|
9242
|
+
var forIn = createForIn(baseFor);
|
9041
9243
|
|
9042
9244
|
/**
|
9043
9245
|
* This method is like `_.forIn` except that it iterates over properties of
|
@@ -9064,15 +9266,12 @@
|
|
9064
9266
|
* });
|
9065
9267
|
* // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c'
|
9066
9268
|
*/
|
9067
|
-
|
9068
|
-
iteratee = bindCallback(iteratee, thisArg, 3);
|
9069
|
-
return baseForRight(object, iteratee, keysIn);
|
9070
|
-
}
|
9269
|
+
var forInRight = createForIn(baseForRight);
|
9071
9270
|
|
9072
9271
|
/**
|
9073
9272
|
* Iterates over own enumerable properties of an object invoking `iteratee`
|
9074
9273
|
* for each property. The `iteratee` is bound to `thisArg` and invoked with
|
9075
|
-
* three arguments
|
9274
|
+
* three arguments: (value, key, object). Iterator functions may exit iteration
|
9076
9275
|
* early by explicitly returning `false`.
|
9077
9276
|
*
|
9078
9277
|
* @static
|
@@ -9096,12 +9295,7 @@
|
|
9096
9295
|
* });
|
9097
9296
|
* // => logs 'a' and 'b' (iteration order is not guaranteed)
|
9098
9297
|
*/
|
9099
|
-
|
9100
|
-
if (typeof iteratee != 'function' || typeof thisArg != 'undefined') {
|
9101
|
-
iteratee = bindCallback(iteratee, thisArg, 3);
|
9102
|
-
}
|
9103
|
-
return baseForOwn(object, iteratee);
|
9104
|
-
}
|
9298
|
+
var forOwn = createForOwn(baseForOwn);
|
9105
9299
|
|
9106
9300
|
/**
|
9107
9301
|
* This method is like `_.forOwn` except that it iterates over properties of
|
@@ -9128,10 +9322,7 @@
|
|
9128
9322
|
* });
|
9129
9323
|
* // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b'
|
9130
9324
|
*/
|
9131
|
-
|
9132
|
-
iteratee = bindCallback(iteratee, thisArg, 3);
|
9133
|
-
return baseForRight(object, iteratee, keys);
|
9134
|
-
}
|
9325
|
+
var forOwnRight = createForOwn(baseForOwnRight);
|
9135
9326
|
|
9136
9327
|
/**
|
9137
9328
|
* Creates an array of function property names from all enumerable properties,
|
@@ -9345,7 +9536,7 @@
|
|
9345
9536
|
/**
|
9346
9537
|
* Creates an object with the same keys as `object` and values generated by
|
9347
9538
|
* running each own enumerable property of `object` through `iteratee`. The
|
9348
|
-
* iteratee function is bound to `thisArg` and invoked with three arguments
|
9539
|
+
* iteratee function is bound to `thisArg` and invoked with three arguments:
|
9349
9540
|
* (value, key, object).
|
9350
9541
|
*
|
9351
9542
|
* If a property name is provided for `iteratee` the created `_.property`
|
@@ -9400,7 +9591,7 @@
|
|
9400
9591
|
* provided it is invoked to produce the merged values of the destination and
|
9401
9592
|
* source properties. If `customizer` returns `undefined` merging is handled
|
9402
9593
|
* by the method instead. The `customizer` is bound to `thisArg` and invoked
|
9403
|
-
* with five arguments
|
9594
|
+
* with five arguments: (objectValue, sourceValue, key, object, source).
|
9404
9595
|
*
|
9405
9596
|
* @static
|
9406
9597
|
* @memberOf _
|
@@ -9449,7 +9640,7 @@
|
|
9449
9640
|
* Property names may be specified as individual arguments or as arrays of
|
9450
9641
|
* property names. If `predicate` is provided it is invoked for each property
|
9451
9642
|
* of `object` omitting the properties `predicate` returns truthy for. The
|
9452
|
-
* predicate is bound to `thisArg` and invoked with three arguments
|
9643
|
+
* predicate is bound to `thisArg` and invoked with three arguments:
|
9453
9644
|
* (value, key, object).
|
9454
9645
|
*
|
9455
9646
|
* @static
|
@@ -9471,19 +9662,19 @@
|
|
9471
9662
|
* _.omit(object, _.isNumber);
|
9472
9663
|
* // => { 'user': 'fred' }
|
9473
9664
|
*/
|
9474
|
-
|
9665
|
+
var omit = restParam(function(object, props) {
|
9475
9666
|
if (object == null) {
|
9476
9667
|
return {};
|
9477
9668
|
}
|
9478
|
-
if (typeof
|
9479
|
-
var props = arrayMap(baseFlatten(
|
9669
|
+
if (typeof props[0] != 'function') {
|
9670
|
+
var props = arrayMap(baseFlatten(props), String);
|
9480
9671
|
return pickByArray(object, baseDifference(keysIn(object), props));
|
9481
9672
|
}
|
9482
|
-
predicate = bindCallback(
|
9673
|
+
var predicate = bindCallback(props[0], props[1], 3);
|
9483
9674
|
return pickByCallback(object, function(value, key, object) {
|
9484
9675
|
return !predicate(value, key, object);
|
9485
9676
|
});
|
9486
|
-
}
|
9677
|
+
});
|
9487
9678
|
|
9488
9679
|
/**
|
9489
9680
|
* Creates a two dimensional array of the key-value pairs for `object`,
|
@@ -9517,7 +9708,7 @@
|
|
9517
9708
|
* names may be specified as individual arguments or as arrays of property
|
9518
9709
|
* names. If `predicate` is provided it is invoked for each property of `object`
|
9519
9710
|
* picking the properties `predicate` returns truthy for. The predicate is
|
9520
|
-
* bound to `thisArg` and invoked with three arguments
|
9711
|
+
* bound to `thisArg` and invoked with three arguments: (value, key, object).
|
9521
9712
|
*
|
9522
9713
|
* @static
|
9523
9714
|
* @memberOf _
|
@@ -9538,14 +9729,14 @@
|
|
9538
9729
|
* _.pick(object, _.isString);
|
9539
9730
|
* // => { 'user': 'fred' }
|
9540
9731
|
*/
|
9541
|
-
|
9732
|
+
var pick = restParam(function(object, props) {
|
9542
9733
|
if (object == null) {
|
9543
9734
|
return {};
|
9544
9735
|
}
|
9545
|
-
return typeof
|
9546
|
-
? pickByCallback(object, bindCallback(
|
9547
|
-
: pickByArray(object, baseFlatten(
|
9548
|
-
}
|
9736
|
+
return typeof props[0] == 'function'
|
9737
|
+
? pickByCallback(object, bindCallback(props[0], props[1], 3))
|
9738
|
+
: pickByArray(object, baseFlatten(props));
|
9739
|
+
});
|
9549
9740
|
|
9550
9741
|
/**
|
9551
9742
|
* Resolves the value of property `key` on `object`. If the value of `key` is
|
@@ -9590,7 +9781,7 @@
|
|
9590
9781
|
* `accumulator` object which is the result of running each of its own enumerable
|
9591
9782
|
* properties through `iteratee`, with each invocation potentially mutating
|
9592
9783
|
* the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked
|
9593
|
-
* with four arguments
|
9784
|
+
* with four arguments: (accumulator, value, key, object). Iterator functions
|
9594
9785
|
* may exit iteration early by explicitly returning `false`.
|
9595
9786
|
*
|
9596
9787
|
* @static
|
@@ -9801,8 +9992,7 @@
|
|
9801
9992
|
/*------------------------------------------------------------------------*/
|
9802
9993
|
|
9803
9994
|
/**
|
9804
|
-
* Converts `string` to camel case.
|
9805
|
-
* See [Wikipedia](https://en.wikipedia.org/wiki/CamelCase) for more details.
|
9995
|
+
* Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
|
9806
9996
|
*
|
9807
9997
|
* @static
|
9808
9998
|
* @memberOf _
|
@@ -9844,9 +10034,8 @@
|
|
9844
10034
|
}
|
9845
10035
|
|
9846
10036
|
/**
|
9847
|
-
* Deburrs `string` by converting latin-1 supplementary letters
|
9848
|
-
*
|
9849
|
-
* for more details.
|
10037
|
+
* Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
|
10038
|
+
* to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
|
9850
10039
|
*
|
9851
10040
|
* @static
|
9852
10041
|
* @memberOf _
|
@@ -9860,7 +10049,7 @@
|
|
9860
10049
|
*/
|
9861
10050
|
function deburr(string) {
|
9862
10051
|
string = baseToString(string);
|
9863
|
-
return string && string.replace(reLatin1, deburrLetter);
|
10052
|
+
return string && string.replace(reLatin1, deburrLetter).replace(reComboMarks, '');
|
9864
10053
|
}
|
9865
10054
|
|
9866
10055
|
/**
|
@@ -9915,9 +10104,8 @@
|
|
9915
10104
|
* [#108](https://html5sec.org/#108), and [#133](https://html5sec.org/#133) of
|
9916
10105
|
* the [HTML5 Security Cheatsheet](https://html5sec.org/) for more details.
|
9917
10106
|
*
|
9918
|
-
* When working with HTML you should always quote attribute values
|
9919
|
-
* XSS vectors.
|
9920
|
-
* for more details.
|
10107
|
+
* When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping)
|
10108
|
+
* to reduce XSS vectors.
|
9921
10109
|
*
|
9922
10110
|
* @static
|
9923
10111
|
* @memberOf _
|
@@ -9938,8 +10126,8 @@
|
|
9938
10126
|
}
|
9939
10127
|
|
9940
10128
|
/**
|
9941
|
-
* Escapes the `RegExp` special characters "\", "^", "$", ".", "|", "?",
|
9942
|
-
* "+", "(", ")", "[", "]", "{" and "}" in `string`.
|
10129
|
+
* Escapes the `RegExp` special characters "\", "/", "^", "$", ".", "|", "?",
|
10130
|
+
* "*", "+", "(", ")", "[", "]", "{" and "}" in `string`.
|
9943
10131
|
*
|
9944
10132
|
* @static
|
9945
10133
|
* @memberOf _
|
@@ -9949,7 +10137,7 @@
|
|
9949
10137
|
* @example
|
9950
10138
|
*
|
9951
10139
|
* _.escapeRegExp('[lodash](https://lodash.com/)');
|
9952
|
-
* // => '\[lodash\]\(https
|
10140
|
+
* // => '\[lodash\]\(https:\/\/lodash\.com\/\)'
|
9953
10141
|
*/
|
9954
10142
|
function escapeRegExp(string) {
|
9955
10143
|
string = baseToString(string);
|
@@ -9959,9 +10147,7 @@
|
|
9959
10147
|
}
|
9960
10148
|
|
9961
10149
|
/**
|
9962
|
-
* Converts `string` to kebab case.
|
9963
|
-
* See [Wikipedia](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles) for
|
9964
|
-
* more details.
|
10150
|
+
* Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
|
9965
10151
|
*
|
9966
10152
|
* @static
|
9967
10153
|
* @memberOf _
|
@@ -9984,9 +10170,8 @@
|
|
9984
10170
|
});
|
9985
10171
|
|
9986
10172
|
/**
|
9987
|
-
* Pads `string` on the left and right sides if it is shorter
|
9988
|
-
*
|
9989
|
-
* characters can't be evenly divided by the padding length.
|
10173
|
+
* Pads `string` on the left and right sides if it is shorter than `length`.
|
10174
|
+
* Padding characters are truncated if they can't be evenly divided by `length`.
|
9990
10175
|
*
|
9991
10176
|
* @static
|
9992
10177
|
* @memberOf _
|
@@ -10018,14 +10203,13 @@
|
|
10018
10203
|
leftLength = floor(mid),
|
10019
10204
|
rightLength = ceil(mid);
|
10020
10205
|
|
10021
|
-
chars =
|
10206
|
+
chars = createPadding('', rightLength, chars);
|
10022
10207
|
return chars.slice(0, leftLength) + string + chars;
|
10023
10208
|
}
|
10024
10209
|
|
10025
10210
|
/**
|
10026
|
-
* Pads `string` on the left side if it is shorter
|
10027
|
-
*
|
10028
|
-
* characters exceeds the padding length.
|
10211
|
+
* Pads `string` on the left side if it is shorter than `length`. Padding
|
10212
|
+
* characters are truncated if they exceed `length`.
|
10029
10213
|
*
|
10030
10214
|
* @static
|
10031
10215
|
* @memberOf _
|
@@ -10045,15 +10229,11 @@
|
|
10045
10229
|
* _.padLeft('abc', 3);
|
10046
10230
|
* // => 'abc'
|
10047
10231
|
*/
|
10048
|
-
|
10049
|
-
string = baseToString(string);
|
10050
|
-
return string && (createPad(string, length, chars) + string);
|
10051
|
-
}
|
10232
|
+
var padLeft = createPadDir();
|
10052
10233
|
|
10053
10234
|
/**
|
10054
|
-
* Pads `string` on the right side if it is shorter
|
10055
|
-
*
|
10056
|
-
* characters exceeds the padding length.
|
10235
|
+
* Pads `string` on the right side if it is shorter than `length`. Padding
|
10236
|
+
* characters are truncated if they exceed `length`.
|
10057
10237
|
*
|
10058
10238
|
* @static
|
10059
10239
|
* @memberOf _
|
@@ -10073,18 +10253,15 @@
|
|
10073
10253
|
* _.padRight('abc', 3);
|
10074
10254
|
* // => 'abc'
|
10075
10255
|
*/
|
10076
|
-
|
10077
|
-
string = baseToString(string);
|
10078
|
-
return string && (string + createPad(string, length, chars));
|
10079
|
-
}
|
10256
|
+
var padRight = createPadDir(true);
|
10080
10257
|
|
10081
10258
|
/**
|
10082
10259
|
* Converts `string` to an integer of the specified radix. If `radix` is
|
10083
10260
|
* `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal,
|
10084
10261
|
* in which case a `radix` of `16` is used.
|
10085
10262
|
*
|
10086
|
-
* **Note:** This method aligns with the ES5 implementation
|
10087
|
-
*
|
10263
|
+
* **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#E)
|
10264
|
+
* of `parseInt`.
|
10088
10265
|
*
|
10089
10266
|
* @static
|
10090
10267
|
* @memberOf _
|
@@ -10164,8 +10341,7 @@
|
|
10164
10341
|
}
|
10165
10342
|
|
10166
10343
|
/**
|
10167
|
-
* Converts `string` to snake case.
|
10168
|
-
* See [Wikipedia](https://en.wikipedia.org/wiki/Snake_case) for more details.
|
10344
|
+
* Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case).
|
10169
10345
|
*
|
10170
10346
|
* @static
|
10171
10347
|
* @memberOf _
|
@@ -10188,9 +10364,7 @@
|
|
10188
10364
|
});
|
10189
10365
|
|
10190
10366
|
/**
|
10191
|
-
* Converts `string` to start case.
|
10192
|
-
* See [Wikipedia](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage)
|
10193
|
-
* for more details.
|
10367
|
+
* Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
|
10194
10368
|
*
|
10195
10369
|
* @static
|
10196
10370
|
* @memberOf _
|
@@ -10249,9 +10423,9 @@
|
|
10249
10423
|
* properties may be accessed as free variables in the template. If a setting
|
10250
10424
|
* object is provided it takes precedence over `_.templateSettings` values.
|
10251
10425
|
*
|
10252
|
-
* **Note:** In the development build `_.template` utilizes
|
10253
|
-
*
|
10254
|
-
* for
|
10426
|
+
* **Note:** In the development build `_.template` utilizes
|
10427
|
+
* [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
|
10428
|
+
* for easier debugging.
|
10255
10429
|
*
|
10256
10430
|
* For more information on precompiling templates see
|
10257
10431
|
* [lodash's custom builds documentation](https://lodash.com/custom-builds).
|
@@ -10463,7 +10637,7 @@
|
|
10463
10637
|
* // => 'abc'
|
10464
10638
|
*
|
10465
10639
|
* _.map([' foo ', ' bar '], _.trim);
|
10466
|
-
* // => ['foo', 'bar]
|
10640
|
+
* // => ['foo', 'bar']
|
10467
10641
|
*/
|
10468
10642
|
function trim(string, chars, guard) {
|
10469
10643
|
var value = string;
|
@@ -10571,7 +10745,7 @@
|
|
10571
10745
|
* 'length': 24,
|
10572
10746
|
* 'separator': /,? +/
|
10573
10747
|
* });
|
10574
|
-
*
|
10748
|
+
* // => 'hi-diddly-ho there...'
|
10575
10749
|
*
|
10576
10750
|
* _.trunc('hi-diddly-ho there, neighborino', {
|
10577
10751
|
* 'omission': ' [...]'
|
@@ -10690,7 +10864,7 @@
|
|
10690
10864
|
* @static
|
10691
10865
|
* @memberOf _
|
10692
10866
|
* @category Utility
|
10693
|
-
* @param {
|
10867
|
+
* @param {Function} func The function to attempt.
|
10694
10868
|
* @returns {*} Returns the `func` result or error object.
|
10695
10869
|
* @example
|
10696
10870
|
*
|
@@ -10703,20 +10877,13 @@
|
|
10703
10877
|
* elements = [];
|
10704
10878
|
* }
|
10705
10879
|
*/
|
10706
|
-
|
10707
|
-
var func = arguments[0],
|
10708
|
-
length = arguments.length,
|
10709
|
-
args = Array(length ? (length - 1) : 0);
|
10710
|
-
|
10711
|
-
while (--length > 0) {
|
10712
|
-
args[length - 1] = arguments[length];
|
10713
|
-
}
|
10880
|
+
var attempt = restParam(function(func, args) {
|
10714
10881
|
try {
|
10715
10882
|
return func.apply(undefined, args);
|
10716
10883
|
} catch(e) {
|
10717
10884
|
return isError(e) ? e : new Error(e);
|
10718
10885
|
}
|
10719
|
-
}
|
10886
|
+
});
|
10720
10887
|
|
10721
10888
|
/**
|
10722
10889
|
* Creates a function that invokes `func` with the `this` binding of `thisArg`
|
@@ -10853,12 +11020,11 @@
|
|
10853
11020
|
*
|
10854
11021
|
* var users = [
|
10855
11022
|
* { 'user': 'barney' },
|
10856
|
-
* { 'user': 'fred' }
|
10857
|
-
* { 'user': 'pebbles' }
|
11023
|
+
* { 'user': 'fred' }
|
10858
11024
|
* ];
|
10859
11025
|
*
|
10860
11026
|
* _.find(users, _.matchesProperty('user', 'fred'));
|
10861
|
-
* // => { 'user': 'fred'
|
11027
|
+
* // => { 'user': 'fred' }
|
10862
11028
|
*/
|
10863
11029
|
function matchesProperty(key, value) {
|
10864
11030
|
return baseMatchesProperty(key + '', baseClone(value, true));
|
@@ -10869,6 +11035,9 @@
|
|
10869
11035
|
* destination object. If `object` is a function then methods are added to
|
10870
11036
|
* its prototype as well.
|
10871
11037
|
*
|
11038
|
+
* **Note:** Use `_.runInContext` to create a pristine `lodash` function
|
11039
|
+
* for mixins to avoid conflicts caused by modifying the original.
|
11040
|
+
*
|
10872
11041
|
* @static
|
10873
11042
|
* @memberOf _
|
10874
11043
|
* @category Utility
|
@@ -10886,7 +11055,7 @@
|
|
10886
11055
|
* });
|
10887
11056
|
* }
|
10888
11057
|
*
|
10889
|
-
* // use `_.runInContext` to avoid
|
11058
|
+
* // use `_.runInContext` to avoid conflicts (esp. in Node.js)
|
10890
11059
|
* var _ = require('lodash').runInContext();
|
10891
11060
|
*
|
10892
11061
|
* _.mixin({ 'vowels': vowels });
|
@@ -10936,12 +11105,10 @@
|
|
10936
11105
|
return function() {
|
10937
11106
|
var chainAll = this.__chain__;
|
10938
11107
|
if (chain || chainAll) {
|
10939
|
-
var result = object(this.__wrapped__)
|
10940
|
-
|
10941
|
-
|
10942
|
-
|
10943
|
-
'thisArg': object
|
10944
|
-
});
|
11108
|
+
var result = object(this.__wrapped__),
|
11109
|
+
actions = result.__actions__ = arrayCopy(this.__actions__);
|
11110
|
+
|
11111
|
+
actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
|
10945
11112
|
result.__chain__ = chainAll;
|
10946
11113
|
return result;
|
10947
11114
|
}
|
@@ -11008,7 +11175,7 @@
|
|
11008
11175
|
* var getName = _.property('user');
|
11009
11176
|
*
|
11010
11177
|
* _.map(users, getName);
|
11011
|
-
* // => ['fred', barney']
|
11178
|
+
* // => ['fred', 'barney']
|
11012
11179
|
*
|
11013
11180
|
* _.pluck(_.sortBy(users, getName), 'user');
|
11014
11181
|
* // => ['barney', 'fred']
|
@@ -11018,7 +11185,7 @@
|
|
11018
11185
|
}
|
11019
11186
|
|
11020
11187
|
/**
|
11021
|
-
* The
|
11188
|
+
* The opposite of `_.property`; this method creates a function which returns
|
11022
11189
|
* the property value of a given key on `object`.
|
11023
11190
|
*
|
11024
11191
|
* @static
|
@@ -11196,16 +11363,16 @@
|
|
11196
11363
|
* `-Infinity` is returned. If an iteratee function is provided it is invoked
|
11197
11364
|
* for each value in `collection` to generate the criterion by which the value
|
11198
11365
|
* is ranked. The `iteratee` is bound to `thisArg` and invoked with three
|
11199
|
-
* arguments
|
11366
|
+
* arguments: (value, index, collection).
|
11200
11367
|
*
|
11201
|
-
* If a property name is provided for `
|
11368
|
+
* If a property name is provided for `iteratee` the created `_.property`
|
11202
11369
|
* style callback returns the property value of the given element.
|
11203
11370
|
*
|
11204
11371
|
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
11205
11372
|
* style callback returns `true` for elements that have a matching property
|
11206
11373
|
* value, else `false`.
|
11207
11374
|
*
|
11208
|
-
* If an object is provided for `
|
11375
|
+
* If an object is provided for `iteratee` the created `_.matches` style
|
11209
11376
|
* callback returns `true` for elements that have the properties of the given
|
11210
11377
|
* object, else `false`.
|
11211
11378
|
*
|
@@ -11232,11 +11399,11 @@
|
|
11232
11399
|
* _.max(users, function(chr) {
|
11233
11400
|
* return chr.age;
|
11234
11401
|
* });
|
11235
|
-
* // => { 'user': 'fred', 'age': 40 }
|
11402
|
+
* // => { 'user': 'fred', 'age': 40 }
|
11236
11403
|
*
|
11237
11404
|
* // using the `_.property` callback shorthand
|
11238
11405
|
* _.max(users, 'age');
|
11239
|
-
* // => { 'user': 'fred', 'age': 40 }
|
11406
|
+
* // => { 'user': 'fred', 'age': 40 }
|
11240
11407
|
*/
|
11241
11408
|
var max = createExtremum(arrayMax);
|
11242
11409
|
|
@@ -11245,16 +11412,16 @@
|
|
11245
11412
|
* `Infinity` is returned. If an iteratee function is provided it is invoked
|
11246
11413
|
* for each value in `collection` to generate the criterion by which the value
|
11247
11414
|
* is ranked. The `iteratee` is bound to `thisArg` and invoked with three
|
11248
|
-
* arguments
|
11415
|
+
* arguments: (value, index, collection).
|
11249
11416
|
*
|
11250
|
-
* If a property name is provided for `
|
11417
|
+
* If a property name is provided for `iteratee` the created `_.property`
|
11251
11418
|
* style callback returns the property value of the given element.
|
11252
11419
|
*
|
11253
11420
|
* If a value is also provided for `thisArg` the created `_.matchesProperty`
|
11254
11421
|
* style callback returns `true` for elements that have a matching property
|
11255
11422
|
* value, else `false`.
|
11256
11423
|
*
|
11257
|
-
* If an object is provided for `
|
11424
|
+
* If an object is provided for `iteratee` the created `_.matches` style
|
11258
11425
|
* callback returns `true` for elements that have the properties of the given
|
11259
11426
|
* object, else `false`.
|
11260
11427
|
*
|
@@ -11281,11 +11448,11 @@
|
|
11281
11448
|
* _.min(users, function(chr) {
|
11282
11449
|
* return chr.age;
|
11283
11450
|
* });
|
11284
|
-
* // => { 'user': 'barney', 'age': 36 }
|
11451
|
+
* // => { 'user': 'barney', 'age': 36 }
|
11285
11452
|
*
|
11286
11453
|
* // using the `_.property` callback shorthand
|
11287
11454
|
* _.min(users, 'age');
|
11288
|
-
* // => { 'user': 'barney', 'age': 36 }
|
11455
|
+
* // => { 'user': 'barney', 'age': 36 }
|
11289
11456
|
*/
|
11290
11457
|
var min = createExtremum(arrayMin, true);
|
11291
11458
|
|
@@ -11296,26 +11463,45 @@
|
|
11296
11463
|
* @memberOf _
|
11297
11464
|
* @category Math
|
11298
11465
|
* @param {Array|Object|string} collection The collection to iterate over.
|
11466
|
+
* @param {Function|Object|string} [iteratee] The function invoked per iteration.
|
11467
|
+
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
11299
11468
|
* @returns {number} Returns the sum.
|
11300
11469
|
* @example
|
11301
11470
|
*
|
11302
|
-
* _.sum([4, 6
|
11303
|
-
* // =>
|
11471
|
+
* _.sum([4, 6]);
|
11472
|
+
* // => 10
|
11473
|
+
*
|
11474
|
+
* _.sum({ 'a': 4, 'b': 6 });
|
11475
|
+
* // => 10
|
11476
|
+
*
|
11477
|
+
* var objects = [
|
11478
|
+
* { 'n': 4 },
|
11479
|
+
* { 'n': 6 }
|
11480
|
+
* ];
|
11481
|
+
*
|
11482
|
+
* _.sum(objects, function(object) {
|
11483
|
+
* return object.n;
|
11484
|
+
* });
|
11485
|
+
* // => 10
|
11304
11486
|
*
|
11305
|
-
*
|
11306
|
-
*
|
11487
|
+
* // using the `_.property` callback shorthand
|
11488
|
+
* _.sum(objects, 'n');
|
11489
|
+
* // => 10
|
11307
11490
|
*/
|
11308
|
-
function sum(collection) {
|
11309
|
-
if (
|
11310
|
-
|
11491
|
+
function sum(collection, iteratee, thisArg) {
|
11492
|
+
if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
|
11493
|
+
iteratee = null;
|
11311
11494
|
}
|
11312
|
-
var
|
11313
|
-
|
11495
|
+
var func = getCallback(),
|
11496
|
+
noIteratee = iteratee == null;
|
11314
11497
|
|
11315
|
-
|
11316
|
-
|
11498
|
+
if (!(func === baseCallback && noIteratee)) {
|
11499
|
+
noIteratee = false;
|
11500
|
+
iteratee = func(iteratee, thisArg, 3);
|
11317
11501
|
}
|
11318
|
-
return
|
11502
|
+
return noIteratee
|
11503
|
+
? arraySum(isArray(collection) ? collection : toIterable(collection))
|
11504
|
+
: baseSum(collection, iteratee);
|
11319
11505
|
}
|
11320
11506
|
|
11321
11507
|
/*------------------------------------------------------------------------*/
|
@@ -11414,6 +11600,7 @@
|
|
11414
11600
|
lodash.reject = reject;
|
11415
11601
|
lodash.remove = remove;
|
11416
11602
|
lodash.rest = rest;
|
11603
|
+
lodash.restParam = restParam;
|
11417
11604
|
lodash.shuffle = shuffle;
|
11418
11605
|
lodash.slice = slice;
|
11419
11606
|
lodash.sortBy = sortBy;
|
@@ -11705,8 +11892,11 @@
|
|
11705
11892
|
|
11706
11893
|
// Add `LazyWrapper` methods to `lodash.prototype`.
|
11707
11894
|
baseForOwn(LazyWrapper.prototype, function(func, methodName) {
|
11708
|
-
var lodashFunc = lodash[methodName]
|
11709
|
-
|
11895
|
+
var lodashFunc = lodash[methodName];
|
11896
|
+
if (!lodashFunc) {
|
11897
|
+
return;
|
11898
|
+
}
|
11899
|
+
var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName),
|
11710
11900
|
retUnwrapped = /^(?:first|last)$/.test(methodName);
|
11711
11901
|
|
11712
11902
|
lodash.prototype[methodName] = function() {
|
@@ -11776,6 +11966,19 @@
|
|
11776
11966
|
};
|
11777
11967
|
});
|
11778
11968
|
|
11969
|
+
// Map minified function names to their real names.
|
11970
|
+
baseForOwn(LazyWrapper.prototype, function(func, methodName) {
|
11971
|
+
var lodashFunc = lodash[methodName];
|
11972
|
+
if (lodashFunc) {
|
11973
|
+
var key = lodashFunc.name,
|
11974
|
+
names = realNames[key] || (realNames[key] = []);
|
11975
|
+
|
11976
|
+
names.push({ 'name': methodName, 'func': lodashFunc });
|
11977
|
+
}
|
11978
|
+
});
|
11979
|
+
|
11980
|
+
realNames[createHybridWrapper(null, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': null }];
|
11981
|
+
|
11779
11982
|
// Add functions to the lazy wrapper.
|
11780
11983
|
LazyWrapper.prototype.clone = lazyClone;
|
11781
11984
|
LazyWrapper.prototype.reverse = lazyReverse;
|