lodash-rails 3.5.0 → 3.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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;
|