lodash-rails 4.14.1 → 4.15.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.core.js +64 -81
- data/vendor/assets/javascripts/lodash.core.min.js +23 -23
- data/vendor/assets/javascripts/lodash.js +397 -271
- data/vendor/assets/javascripts/lodash.min.js +124 -122
- metadata +2 -2
@@ -12,7 +12,7 @@
|
|
12
12
|
var undefined;
|
13
13
|
|
14
14
|
/** Used as the semantic version number. */
|
15
|
-
var VERSION = '4.
|
15
|
+
var VERSION = '4.15.0';
|
16
16
|
|
17
17
|
/** Used as the size to enable large array optimizations. */
|
18
18
|
var LARGE_ARRAY_SIZE = 200;
|
@@ -134,7 +134,7 @@
|
|
134
134
|
|
135
135
|
/**
|
136
136
|
* Used to match `RegExp`
|
137
|
-
* [syntax characters](http://ecma-international.org/ecma-262/
|
137
|
+
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
|
138
138
|
*/
|
139
139
|
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
|
140
140
|
reHasRegExpChar = RegExp(reRegExpChar.source);
|
@@ -149,15 +149,15 @@
|
|
149
149
|
reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
|
150
150
|
reSplitDetails = /,? & /;
|
151
151
|
|
152
|
-
/** Used to match
|
153
|
-
var
|
152
|
+
/** Used to match words composed of alphanumeric characters. */
|
153
|
+
var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
|
154
154
|
|
155
155
|
/** Used to match backslashes in property paths. */
|
156
156
|
var reEscapeChar = /\\(\\)?/g;
|
157
157
|
|
158
158
|
/**
|
159
159
|
* Used to match
|
160
|
-
* [ES template delimiters](http://ecma-international.org/ecma-262/
|
160
|
+
* [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
|
161
161
|
*/
|
162
162
|
var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
|
163
163
|
|
@@ -182,8 +182,8 @@
|
|
182
182
|
/** Used to detect unsigned integer values. */
|
183
183
|
var reIsUint = /^(?:0|[1-9]\d*)$/;
|
184
184
|
|
185
|
-
/** Used to match
|
186
|
-
var
|
185
|
+
/** Used to match Latin Unicode letters (excluding mathematical operators). */
|
186
|
+
var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
|
187
187
|
|
188
188
|
/** Used to ensure capturing order of template delimiters. */
|
189
189
|
var reNoMatch = /($^)/;
|
@@ -244,10 +244,10 @@
|
|
244
244
|
var reComboMark = RegExp(rsCombo, 'g');
|
245
245
|
|
246
246
|
/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
|
247
|
-
var
|
247
|
+
var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
|
248
248
|
|
249
249
|
/** Used to match complex or compound words. */
|
250
|
-
var
|
250
|
+
var reUnicodeWord = RegExp([
|
251
251
|
rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
|
252
252
|
rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')',
|
253
253
|
rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr,
|
@@ -257,17 +257,17 @@
|
|
257
257
|
].join('|'), 'g');
|
258
258
|
|
259
259
|
/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
|
260
|
-
var
|
260
|
+
var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');
|
261
261
|
|
262
262
|
/** Used to detect strings that need a more robust regexp to match words. */
|
263
|
-
var
|
263
|
+
var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
|
264
264
|
|
265
265
|
/** Used to assign default `context` object properties. */
|
266
266
|
var contextProps = [
|
267
267
|
'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',
|
268
268
|
'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',
|
269
|
-
'Promise', '
|
270
|
-
'
|
269
|
+
'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',
|
270
|
+
'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
|
271
271
|
'_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'
|
272
272
|
];
|
273
273
|
|
@@ -306,16 +306,17 @@
|
|
306
306
|
cloneableTags[errorTag] = cloneableTags[funcTag] =
|
307
307
|
cloneableTags[weakMapTag] = false;
|
308
308
|
|
309
|
-
/** Used to map
|
309
|
+
/** Used to map Latin Unicode letters to basic Latin letters. */
|
310
310
|
var deburredLetters = {
|
311
|
+
// Latin-1 Supplement block.
|
311
312
|
'\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
|
312
313
|
'\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
|
313
314
|
'\xc7': 'C', '\xe7': 'c',
|
314
315
|
'\xd0': 'D', '\xf0': 'd',
|
315
316
|
'\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
|
316
317
|
'\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
|
317
|
-
'\
|
318
|
-
'\
|
318
|
+
'\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
|
319
|
+
'\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i',
|
319
320
|
'\xd1': 'N', '\xf1': 'n',
|
320
321
|
'\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
|
321
322
|
'\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
|
@@ -324,7 +325,43 @@
|
|
324
325
|
'\xdd': 'Y', '\xfd': 'y', '\xff': 'y',
|
325
326
|
'\xc6': 'Ae', '\xe6': 'ae',
|
326
327
|
'\xde': 'Th', '\xfe': 'th',
|
327
|
-
'\xdf': 'ss'
|
328
|
+
'\xdf': 'ss',
|
329
|
+
// Latin Extended-A block.
|
330
|
+
'\u0100': 'A', '\u0102': 'A', '\u0104': 'A',
|
331
|
+
'\u0101': 'a', '\u0103': 'a', '\u0105': 'a',
|
332
|
+
'\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
|
333
|
+
'\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
|
334
|
+
'\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
|
335
|
+
'\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
|
336
|
+
'\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
|
337
|
+
'\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
|
338
|
+
'\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
|
339
|
+
'\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
|
340
|
+
'\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
|
341
|
+
'\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
|
342
|
+
'\u0134': 'J', '\u0135': 'j',
|
343
|
+
'\u0136': 'K', '\u0137': 'k', '\u0138': 'k',
|
344
|
+
'\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
|
345
|
+
'\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
|
346
|
+
'\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
|
347
|
+
'\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
|
348
|
+
'\u014c': 'O', '\u014e': 'O', '\u0150': 'O',
|
349
|
+
'\u014d': 'o', '\u014f': 'o', '\u0151': 'o',
|
350
|
+
'\u0154': 'R', '\u0156': 'R', '\u0158': 'R',
|
351
|
+
'\u0155': 'r', '\u0157': 'r', '\u0159': 'r',
|
352
|
+
'\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
|
353
|
+
'\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's',
|
354
|
+
'\u0162': 'T', '\u0164': 'T', '\u0166': 'T',
|
355
|
+
'\u0163': 't', '\u0165': 't', '\u0167': 't',
|
356
|
+
'\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
|
357
|
+
'\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
|
358
|
+
'\u0174': 'W', '\u0175': 'w',
|
359
|
+
'\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y',
|
360
|
+
'\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z',
|
361
|
+
'\u017a': 'z', '\u017c': 'z', '\u017e': 'z',
|
362
|
+
'\u0132': 'IJ', '\u0133': 'ij',
|
363
|
+
'\u0152': 'Oe', '\u0153': 'oe',
|
364
|
+
'\u0149': "'n", '\u017f': 'ss'
|
328
365
|
};
|
329
366
|
|
330
367
|
/** Used to map characters to HTML entities. */
|
@@ -560,7 +597,7 @@
|
|
560
597
|
* specifying an index to search from.
|
561
598
|
*
|
562
599
|
* @private
|
563
|
-
* @param {Array} [array] The array to
|
600
|
+
* @param {Array} [array] The array to inspect.
|
564
601
|
* @param {*} target The value to search for.
|
565
602
|
* @returns {boolean} Returns `true` if `target` is found, else `false`.
|
566
603
|
*/
|
@@ -573,7 +610,7 @@
|
|
573
610
|
* This function is like `arrayIncludes` except that it accepts a comparator.
|
574
611
|
*
|
575
612
|
* @private
|
576
|
-
* @param {Array} [array] The array to
|
613
|
+
* @param {Array} [array] The array to inspect.
|
577
614
|
* @param {*} target The value to search for.
|
578
615
|
* @param {Function} comparator The comparator invoked per element.
|
579
616
|
* @returns {boolean} Returns `true` if `target` is found, else `false`.
|
@@ -699,13 +736,44 @@
|
|
699
736
|
return false;
|
700
737
|
}
|
701
738
|
|
739
|
+
/**
|
740
|
+
* Gets the size of an ASCII `string`.
|
741
|
+
*
|
742
|
+
* @private
|
743
|
+
* @param {string} string The string inspect.
|
744
|
+
* @returns {number} Returns the string size.
|
745
|
+
*/
|
746
|
+
var asciiSize = baseProperty('length');
|
747
|
+
|
748
|
+
/**
|
749
|
+
* Converts an ASCII `string` to an array.
|
750
|
+
*
|
751
|
+
* @private
|
752
|
+
* @param {string} string The string to convert.
|
753
|
+
* @returns {Array} Returns the converted array.
|
754
|
+
*/
|
755
|
+
function asciiToArray(string) {
|
756
|
+
return string.split('');
|
757
|
+
}
|
758
|
+
|
759
|
+
/**
|
760
|
+
* Splits an ASCII `string` into an array of its words.
|
761
|
+
*
|
762
|
+
* @private
|
763
|
+
* @param {string} The string to inspect.
|
764
|
+
* @returns {Array} Returns the words of `string`.
|
765
|
+
*/
|
766
|
+
function asciiWords(string) {
|
767
|
+
return string.match(reAsciiWord) || [];
|
768
|
+
}
|
769
|
+
|
702
770
|
/**
|
703
771
|
* The base implementation of methods like `_.findKey` and `_.findLastKey`,
|
704
772
|
* without support for iteratee shorthands, which iterates over `collection`
|
705
773
|
* using `eachFunc`.
|
706
774
|
*
|
707
775
|
* @private
|
708
|
-
* @param {Array|Object} collection The collection to
|
776
|
+
* @param {Array|Object} collection The collection to inspect.
|
709
777
|
* @param {Function} predicate The function invoked per iteration.
|
710
778
|
* @param {Function} eachFunc The function to iterate over `collection`.
|
711
779
|
* @returns {*} Returns the found element or its key, else `undefined`.
|
@@ -726,7 +794,7 @@
|
|
726
794
|
* support for iteratee shorthands.
|
727
795
|
*
|
728
796
|
* @private
|
729
|
-
* @param {Array} array The array to
|
797
|
+
* @param {Array} array The array to inspect.
|
730
798
|
* @param {Function} predicate The function invoked per iteration.
|
731
799
|
* @param {number} fromIndex The index to search from.
|
732
800
|
* @param {boolean} [fromRight] Specify iterating from right to left.
|
@@ -748,7 +816,7 @@
|
|
748
816
|
* The base implementation of `_.indexOf` without `fromIndex` bounds checks.
|
749
817
|
*
|
750
818
|
* @private
|
751
|
-
* @param {Array} array The array to
|
819
|
+
* @param {Array} array The array to inspect.
|
752
820
|
* @param {*} value The value to search for.
|
753
821
|
* @param {number} fromIndex The index to search from.
|
754
822
|
* @returns {number} Returns the index of the matched value, else `-1`.
|
@@ -772,7 +840,7 @@
|
|
772
840
|
* This function is like `baseIndexOf` except that it accepts a comparator.
|
773
841
|
*
|
774
842
|
* @private
|
775
|
-
* @param {Array} array The array to
|
843
|
+
* @param {Array} array The array to inspect.
|
776
844
|
* @param {*} value The value to search for.
|
777
845
|
* @param {number} fromIndex The index to search from.
|
778
846
|
* @param {Function} comparator The comparator invoked per element.
|
@@ -1035,7 +1103,8 @@
|
|
1035
1103
|
}
|
1036
1104
|
|
1037
1105
|
/**
|
1038
|
-
* Used by `_.deburr` to convert
|
1106
|
+
* Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
|
1107
|
+
* letters to basic Latin letters.
|
1039
1108
|
*
|
1040
1109
|
* @private
|
1041
1110
|
* @param {string} letter The matched letter to deburr.
|
@@ -1075,6 +1144,28 @@
|
|
1075
1144
|
return object == null ? undefined : object[key];
|
1076
1145
|
}
|
1077
1146
|
|
1147
|
+
/**
|
1148
|
+
* Checks if `string` contains Unicode symbols.
|
1149
|
+
*
|
1150
|
+
* @private
|
1151
|
+
* @param {string} string The string to inspect.
|
1152
|
+
* @returns {boolean} Returns `true` if a symbol is found, else `false`.
|
1153
|
+
*/
|
1154
|
+
function hasUnicode(string) {
|
1155
|
+
return reHasUnicode.test(string);
|
1156
|
+
}
|
1157
|
+
|
1158
|
+
/**
|
1159
|
+
* Checks if `string` contains a word composed of Unicode symbols.
|
1160
|
+
*
|
1161
|
+
* @private
|
1162
|
+
* @param {string} string The string to inspect.
|
1163
|
+
* @returns {boolean} Returns `true` if a word is found, else `false`.
|
1164
|
+
*/
|
1165
|
+
function hasUnicodeWord(string) {
|
1166
|
+
return reHasUnicodeWord.test(string);
|
1167
|
+
}
|
1168
|
+
|
1078
1169
|
/**
|
1079
1170
|
* Checks if `value` is a host object in IE < 9.
|
1080
1171
|
*
|
@@ -1129,7 +1220,7 @@
|
|
1129
1220
|
}
|
1130
1221
|
|
1131
1222
|
/**
|
1132
|
-
* Creates a function that invokes `func` with its
|
1223
|
+
* Creates a unary function that invokes `func` with its argument transformed.
|
1133
1224
|
*
|
1134
1225
|
* @private
|
1135
1226
|
* @param {Function} func The function to wrap.
|
@@ -1209,14 +1300,9 @@
|
|
1209
1300
|
* @returns {number} Returns the string size.
|
1210
1301
|
*/
|
1211
1302
|
function stringSize(string) {
|
1212
|
-
|
1213
|
-
|
1214
|
-
|
1215
|
-
var result = reComplexSymbol.lastIndex = 0;
|
1216
|
-
while (reComplexSymbol.test(string)) {
|
1217
|
-
result++;
|
1218
|
-
}
|
1219
|
-
return result;
|
1303
|
+
return hasUnicode(string)
|
1304
|
+
? unicodeSize(string)
|
1305
|
+
: asciiSize(string);
|
1220
1306
|
}
|
1221
1307
|
|
1222
1308
|
/**
|
@@ -1227,7 +1313,9 @@
|
|
1227
1313
|
* @returns {Array} Returns the converted array.
|
1228
1314
|
*/
|
1229
1315
|
function stringToArray(string) {
|
1230
|
-
return string
|
1316
|
+
return hasUnicode(string)
|
1317
|
+
? unicodeToArray(string)
|
1318
|
+
: asciiToArray(string);
|
1231
1319
|
}
|
1232
1320
|
|
1233
1321
|
/**
|
@@ -1239,6 +1327,43 @@
|
|
1239
1327
|
*/
|
1240
1328
|
var unescapeHtmlChar = basePropertyOf(htmlUnescapes);
|
1241
1329
|
|
1330
|
+
/**
|
1331
|
+
* Gets the size of a Unicode `string`.
|
1332
|
+
*
|
1333
|
+
* @private
|
1334
|
+
* @param {string} string The string inspect.
|
1335
|
+
* @returns {number} Returns the string size.
|
1336
|
+
*/
|
1337
|
+
function unicodeSize(string) {
|
1338
|
+
var result = reUnicode.lastIndex = 0;
|
1339
|
+
while (reUnicode.test(string)) {
|
1340
|
+
result++;
|
1341
|
+
}
|
1342
|
+
return result;
|
1343
|
+
}
|
1344
|
+
|
1345
|
+
/**
|
1346
|
+
* Converts a Unicode `string` to an array.
|
1347
|
+
*
|
1348
|
+
* @private
|
1349
|
+
* @param {string} string The string to convert.
|
1350
|
+
* @returns {Array} Returns the converted array.
|
1351
|
+
*/
|
1352
|
+
function unicodeToArray(string) {
|
1353
|
+
return string.match(reUnicode) || [];
|
1354
|
+
}
|
1355
|
+
|
1356
|
+
/**
|
1357
|
+
* Splits a Unicode `string` into an array of its words.
|
1358
|
+
*
|
1359
|
+
* @private
|
1360
|
+
* @param {string} The string to inspect.
|
1361
|
+
* @returns {Array} Returns the words of `string`.
|
1362
|
+
*/
|
1363
|
+
function unicodeWords(string) {
|
1364
|
+
return string.match(reUnicodeWord) || [];
|
1365
|
+
}
|
1366
|
+
|
1242
1367
|
/*--------------------------------------------------------------------------*/
|
1243
1368
|
|
1244
1369
|
/**
|
@@ -1278,20 +1403,23 @@
|
|
1278
1403
|
* var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
|
1279
1404
|
*/
|
1280
1405
|
function runInContext(context) {
|
1281
|
-
context = context ? _.defaults(
|
1406
|
+
context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;
|
1282
1407
|
|
1283
1408
|
/** Built-in constructor references. */
|
1284
1409
|
var Array = context.Array,
|
1285
1410
|
Date = context.Date,
|
1286
1411
|
Error = context.Error,
|
1412
|
+
Function = context.Function,
|
1287
1413
|
Math = context.Math,
|
1414
|
+
Object = context.Object,
|
1288
1415
|
RegExp = context.RegExp,
|
1416
|
+
String = context.String,
|
1289
1417
|
TypeError = context.TypeError;
|
1290
1418
|
|
1291
1419
|
/** Used for built-in method references. */
|
1292
|
-
var arrayProto =
|
1293
|
-
|
1294
|
-
|
1420
|
+
var arrayProto = Array.prototype,
|
1421
|
+
funcProto = Function.prototype,
|
1422
|
+
objectProto = Object.prototype;
|
1295
1423
|
|
1296
1424
|
/** Used to detect overreaching core-js shims. */
|
1297
1425
|
var coreJsData = context['__core-js_shared__'];
|
@@ -1303,7 +1431,7 @@
|
|
1303
1431
|
}());
|
1304
1432
|
|
1305
1433
|
/** Used to resolve the decompiled source of functions. */
|
1306
|
-
var funcToString =
|
1434
|
+
var funcToString = funcProto.toString;
|
1307
1435
|
|
1308
1436
|
/** Used to check objects for own properties. */
|
1309
1437
|
var hasOwnProperty = objectProto.hasOwnProperty;
|
@@ -1316,7 +1444,7 @@
|
|
1316
1444
|
|
1317
1445
|
/**
|
1318
1446
|
* Used to resolve the
|
1319
|
-
* [`toStringTag`](http://ecma-international.org/ecma-262/
|
1447
|
+
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
1320
1448
|
* of values.
|
1321
1449
|
*/
|
1322
1450
|
var objectToString = objectProto.toString;
|
@@ -1332,36 +1460,33 @@
|
|
1332
1460
|
|
1333
1461
|
/** Built-in value references. */
|
1334
1462
|
var Buffer = moduleExports ? context.Buffer : undefined,
|
1335
|
-
Reflect = context.Reflect,
|
1336
1463
|
Symbol = context.Symbol,
|
1337
1464
|
Uint8Array = context.Uint8Array,
|
1338
|
-
|
1465
|
+
getPrototype = overArg(Object.getPrototypeOf, Object),
|
1339
1466
|
iteratorSymbol = Symbol ? Symbol.iterator : undefined,
|
1340
|
-
objectCreate =
|
1467
|
+
objectCreate = Object.create,
|
1341
1468
|
propertyIsEnumerable = objectProto.propertyIsEnumerable,
|
1342
1469
|
splice = arrayProto.splice,
|
1343
1470
|
spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;
|
1344
1471
|
|
1345
|
-
/**
|
1346
|
-
var
|
1347
|
-
|
1472
|
+
/** Mocked built-ins. */
|
1473
|
+
var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
|
1474
|
+
ctxNow = Date && Date.now !== root.Date.now && Date.now,
|
1475
|
+
ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;
|
1348
1476
|
|
1349
1477
|
/* Built-in method references for those with the same name as other `lodash` methods. */
|
1350
1478
|
var nativeCeil = Math.ceil,
|
1351
1479
|
nativeFloor = Math.floor,
|
1352
|
-
nativeGetPrototype = Object.getPrototypeOf,
|
1353
1480
|
nativeGetSymbols = Object.getOwnPropertySymbols,
|
1354
1481
|
nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
|
1355
1482
|
nativeIsFinite = context.isFinite,
|
1356
1483
|
nativeJoin = arrayProto.join,
|
1357
|
-
nativeKeys = Object.keys,
|
1484
|
+
nativeKeys = overArg(Object.keys, Object),
|
1358
1485
|
nativeMax = Math.max,
|
1359
1486
|
nativeMin = Math.min,
|
1360
1487
|
nativeParseInt = context.parseInt,
|
1361
1488
|
nativeRandom = Math.random,
|
1362
|
-
|
1363
|
-
nativeReverse = arrayProto.reverse,
|
1364
|
-
nativeSplit = stringProto.split;
|
1489
|
+
nativeReverse = arrayProto.reverse;
|
1365
1490
|
|
1366
1491
|
/* Built-in method references that are verified to be native. */
|
1367
1492
|
var DataView = getNative(context, 'DataView'),
|
@@ -1369,11 +1494,11 @@
|
|
1369
1494
|
Promise = getNative(context, 'Promise'),
|
1370
1495
|
Set = getNative(context, 'Set'),
|
1371
1496
|
WeakMap = getNative(context, 'WeakMap'),
|
1372
|
-
nativeCreate = getNative(
|
1497
|
+
nativeCreate = getNative(Object, 'create');
|
1373
1498
|
|
1374
1499
|
/* Used to set `toString` methods. */
|
1375
1500
|
var defineProperty = (function() {
|
1376
|
-
var func = getNative(
|
1501
|
+
var func = getNative(Object, 'defineProperty'),
|
1377
1502
|
name = getNative.name;
|
1378
1503
|
|
1379
1504
|
return (name && name.length > 2) ? func : undefined;
|
@@ -2201,6 +2326,33 @@
|
|
2201
2326
|
|
2202
2327
|
/*------------------------------------------------------------------------*/
|
2203
2328
|
|
2329
|
+
/**
|
2330
|
+
* Creates an array of the enumerable property names of the array-like `value`.
|
2331
|
+
*
|
2332
|
+
* @private
|
2333
|
+
* @param {*} value The value to query.
|
2334
|
+
* @param {boolean} inherited Specify returning inherited property names.
|
2335
|
+
* @returns {Array} Returns the array of property names.
|
2336
|
+
*/
|
2337
|
+
function arrayLikeKeys(value, inherited) {
|
2338
|
+
// Safari 8.1 makes `arguments.callee` enumerable in strict mode.
|
2339
|
+
// Safari 9 makes `arguments.length` enumerable in strict mode.
|
2340
|
+
var result = (isArray(value) || isArguments(value))
|
2341
|
+
? baseTimes(value.length, String)
|
2342
|
+
: [];
|
2343
|
+
|
2344
|
+
var length = result.length,
|
2345
|
+
skipIndexes = !!length;
|
2346
|
+
|
2347
|
+
for (var key in value) {
|
2348
|
+
if ((inherited || hasOwnProperty.call(value, key)) &&
|
2349
|
+
!(skipIndexes && (key == 'length' || isIndex(key, length)))) {
|
2350
|
+
result.push(key);
|
2351
|
+
}
|
2352
|
+
}
|
2353
|
+
return result;
|
2354
|
+
}
|
2355
|
+
|
2204
2356
|
/**
|
2205
2357
|
* Used by `_.defaults` to customize its `_.assignIn` use.
|
2206
2358
|
*
|
@@ -2237,7 +2389,7 @@
|
|
2237
2389
|
|
2238
2390
|
/**
|
2239
2391
|
* Assigns `value` to `key` of `object` if the existing value is not equivalent
|
2240
|
-
* using [`SameValueZero`](http://ecma-international.org/ecma-262/
|
2392
|
+
* using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
2241
2393
|
* for equality comparisons.
|
2242
2394
|
*
|
2243
2395
|
* @private
|
@@ -2257,7 +2409,7 @@
|
|
2257
2409
|
* Gets the index at which the `key` is found in `array` of key-value pairs.
|
2258
2410
|
*
|
2259
2411
|
* @private
|
2260
|
-
* @param {Array} array The array to
|
2412
|
+
* @param {Array} array The array to inspect.
|
2261
2413
|
* @param {*} key The key to search for.
|
2262
2414
|
* @returns {number} Returns the index of the matched value, else `-1`.
|
2263
2415
|
*/
|
@@ -2445,14 +2597,13 @@
|
|
2445
2597
|
if (object == null) {
|
2446
2598
|
return !length;
|
2447
2599
|
}
|
2448
|
-
|
2449
|
-
while (
|
2450
|
-
var key = props[
|
2600
|
+
object = Object(object);
|
2601
|
+
while (length--) {
|
2602
|
+
var key = props[length],
|
2451
2603
|
predicate = source[key],
|
2452
2604
|
value = object[key];
|
2453
2605
|
|
2454
|
-
if ((value === undefined &&
|
2455
|
-
!(key in Object(object))) || !predicate(value)) {
|
2606
|
+
if ((value === undefined && !(key in object)) || !predicate(value)) {
|
2456
2607
|
return false;
|
2457
2608
|
}
|
2458
2609
|
}
|
@@ -2479,7 +2630,7 @@
|
|
2479
2630
|
* @param {Function} func The function to delay.
|
2480
2631
|
* @param {number} wait The number of milliseconds to delay invocation.
|
2481
2632
|
* @param {Array} args The arguments to provide to `func`.
|
2482
|
-
* @returns {number} Returns the timer id.
|
2633
|
+
* @returns {number|Object} Returns the timer id or timeout object.
|
2483
2634
|
*/
|
2484
2635
|
function baseDelay(func, wait, args) {
|
2485
2636
|
if (typeof func != 'function') {
|
@@ -2824,12 +2975,7 @@
|
|
2824
2975
|
* @returns {boolean} Returns `true` if `key` exists, else `false`.
|
2825
2976
|
*/
|
2826
2977
|
function baseHas(object, key) {
|
2827
|
-
|
2828
|
-
// that are composed entirely of index properties, return `false` for
|
2829
|
-
// `hasOwnProperty` checks of them.
|
2830
|
-
return object != null &&
|
2831
|
-
(hasOwnProperty.call(object, key) ||
|
2832
|
-
(typeof object == 'object' && key in object && getPrototype(object) === null));
|
2978
|
+
return object != null && hasOwnProperty.call(object, key);
|
2833
2979
|
}
|
2834
2980
|
|
2835
2981
|
/**
|
@@ -3203,40 +3349,47 @@
|
|
3203
3349
|
}
|
3204
3350
|
|
3205
3351
|
/**
|
3206
|
-
* The base implementation of `_.keys` which doesn't
|
3207
|
-
* property of prototypes or treat sparse arrays as dense.
|
3352
|
+
* The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
|
3208
3353
|
*
|
3209
3354
|
* @private
|
3210
3355
|
* @param {Object} object The object to query.
|
3211
3356
|
* @returns {Array} Returns the array of property names.
|
3212
3357
|
*/
|
3213
|
-
|
3358
|
+
function baseKeys(object) {
|
3359
|
+
if (!isPrototype(object)) {
|
3360
|
+
return nativeKeys(object);
|
3361
|
+
}
|
3362
|
+
var result = [];
|
3363
|
+
for (var key in Object(object)) {
|
3364
|
+
if (hasOwnProperty.call(object, key) && key != 'constructor') {
|
3365
|
+
result.push(key);
|
3366
|
+
}
|
3367
|
+
}
|
3368
|
+
return result;
|
3369
|
+
}
|
3214
3370
|
|
3215
3371
|
/**
|
3216
|
-
* The base implementation of `_.keysIn` which doesn't
|
3217
|
-
* property of prototypes or treat sparse arrays as dense.
|
3372
|
+
* The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
|
3218
3373
|
*
|
3219
3374
|
* @private
|
3220
3375
|
* @param {Object} object The object to query.
|
3221
3376
|
* @returns {Array} Returns the array of property names.
|
3222
3377
|
*/
|
3223
3378
|
function baseKeysIn(object) {
|
3224
|
-
|
3379
|
+
if (!isObject(object)) {
|
3380
|
+
return nativeKeysIn(object);
|
3381
|
+
}
|
3382
|
+
var isProto = isPrototype(object),
|
3383
|
+
result = [];
|
3225
3384
|
|
3226
|
-
var result = [];
|
3227
3385
|
for (var key in object) {
|
3228
|
-
|
3386
|
+
if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
|
3387
|
+
result.push(key);
|
3388
|
+
}
|
3229
3389
|
}
|
3230
3390
|
return result;
|
3231
3391
|
}
|
3232
3392
|
|
3233
|
-
// Fallback for IE < 9 with es6-shim.
|
3234
|
-
if (enumerate && !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf')) {
|
3235
|
-
baseKeysIn = function(object) {
|
3236
|
-
return iteratorToArray(enumerate(object));
|
3237
|
-
};
|
3238
|
-
}
|
3239
|
-
|
3240
3393
|
/**
|
3241
3394
|
* The base implementation of `_.lt` which doesn't coerce arguments.
|
3242
3395
|
*
|
@@ -3321,7 +3474,7 @@
|
|
3321
3474
|
return;
|
3322
3475
|
}
|
3323
3476
|
if (!(isArray(source) || isTypedArray(source))) {
|
3324
|
-
var props =
|
3477
|
+
var props = baseKeysIn(source);
|
3325
3478
|
}
|
3326
3479
|
arrayEach(props || source, function(srcValue, key) {
|
3327
3480
|
if (props) {
|
@@ -3681,13 +3834,16 @@
|
|
3681
3834
|
* The base implementation of `_.set`.
|
3682
3835
|
*
|
3683
3836
|
* @private
|
3684
|
-
* @param {Object} object The object to
|
3837
|
+
* @param {Object} object The object to modify.
|
3685
3838
|
* @param {Array|string} path The path of the property to set.
|
3686
3839
|
* @param {*} value The value to set.
|
3687
3840
|
* @param {Function} [customizer] The function to customize path creation.
|
3688
3841
|
* @returns {Object} Returns `object`.
|
3689
3842
|
*/
|
3690
3843
|
function baseSet(object, path, value, customizer) {
|
3844
|
+
if (!isObject(object)) {
|
3845
|
+
return object;
|
3846
|
+
}
|
3691
3847
|
path = isKey(path, object) ? [path] : castPath(path);
|
3692
3848
|
|
3693
3849
|
var index = -1,
|
@@ -3696,20 +3852,19 @@
|
|
3696
3852
|
nested = object;
|
3697
3853
|
|
3698
3854
|
while (nested != null && ++index < length) {
|
3699
|
-
var key = toKey(path[index])
|
3700
|
-
|
3701
|
-
|
3702
|
-
|
3703
|
-
|
3704
|
-
|
3705
|
-
|
3706
|
-
|
3707
|
-
|
3708
|
-
|
3709
|
-
}
|
3855
|
+
var key = toKey(path[index]),
|
3856
|
+
newValue = value;
|
3857
|
+
|
3858
|
+
if (index != lastIndex) {
|
3859
|
+
var objValue = nested[key];
|
3860
|
+
newValue = customizer ? customizer(objValue, key, nested) : undefined;
|
3861
|
+
if (newValue === undefined) {
|
3862
|
+
newValue = isObject(objValue)
|
3863
|
+
? objValue
|
3864
|
+
: (isIndex(path[index + 1]) ? [] : {});
|
3710
3865
|
}
|
3711
|
-
assignValue(nested, key, newValue);
|
3712
3866
|
}
|
3867
|
+
assignValue(nested, key, newValue);
|
3713
3868
|
nested = nested[key];
|
3714
3869
|
}
|
3715
3870
|
return object;
|
@@ -4002,14 +4157,14 @@
|
|
4002
4157
|
object = parent(object, path);
|
4003
4158
|
|
4004
4159
|
var key = toKey(last(path));
|
4005
|
-
return !(object != null &&
|
4160
|
+
return !(object != null && hasOwnProperty.call(object, key)) || delete object[key];
|
4006
4161
|
}
|
4007
4162
|
|
4008
4163
|
/**
|
4009
4164
|
* The base implementation of `_.update`.
|
4010
4165
|
*
|
4011
4166
|
* @private
|
4012
|
-
* @param {Object} object The object to
|
4167
|
+
* @param {Object} object The object to modify.
|
4013
4168
|
* @param {Array|string} path The path of the property to update.
|
4014
4169
|
* @param {Function} updater The function to produce the updated value.
|
4015
4170
|
* @param {Function} [customizer] The function to customize path creation.
|
@@ -4157,6 +4312,16 @@
|
|
4157
4312
|
return (!start && end >= length) ? array : baseSlice(array, start, end);
|
4158
4313
|
}
|
4159
4314
|
|
4315
|
+
/**
|
4316
|
+
* A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).
|
4317
|
+
*
|
4318
|
+
* @private
|
4319
|
+
* @param {number|Object} id The timer id or timeout object of the timer to clear.
|
4320
|
+
*/
|
4321
|
+
var clearTimeout = ctxClearTimeout || function(id) {
|
4322
|
+
return root.clearTimeout(id);
|
4323
|
+
};
|
4324
|
+
|
4160
4325
|
/**
|
4161
4326
|
* Creates a clone of `buffer`.
|
4162
4327
|
*
|
@@ -4610,7 +4775,7 @@
|
|
4610
4775
|
return function(string) {
|
4611
4776
|
string = toString(string);
|
4612
4777
|
|
4613
|
-
var strSymbols =
|
4778
|
+
var strSymbols = hasUnicode(string)
|
4614
4779
|
? stringToArray(string)
|
4615
4780
|
: undefined;
|
4616
4781
|
|
@@ -4650,7 +4815,7 @@
|
|
4650
4815
|
function createCtor(Ctor) {
|
4651
4816
|
return function() {
|
4652
4817
|
// Use a `switch` statement to work with class constructors. See
|
4653
|
-
// http://ecma-international.org/ecma-262/
|
4818
|
+
// http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
|
4654
4819
|
// for more details.
|
4655
4820
|
var args = arguments;
|
4656
4821
|
switch (args.length) {
|
@@ -4953,7 +5118,7 @@
|
|
4953
5118
|
return charsLength ? baseRepeat(chars, length) : chars;
|
4954
5119
|
}
|
4955
5120
|
var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
|
4956
|
-
return
|
5121
|
+
return hasUnicode(chars)
|
4957
5122
|
? castSlice(stringToArray(result), 0, length).join('')
|
4958
5123
|
: result.slice(0, length);
|
4959
5124
|
}
|
@@ -5338,7 +5503,7 @@
|
|
5338
5503
|
case regexpTag:
|
5339
5504
|
case stringTag:
|
5340
5505
|
// Coerce regexes to strings and treat strings, primitives and objects,
|
5341
|
-
// as equal. See http://www.ecma-international.org/ecma-262/
|
5506
|
+
// as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
|
5342
5507
|
// for more details.
|
5343
5508
|
return object == (other + '');
|
5344
5509
|
|
@@ -5400,7 +5565,7 @@
|
|
5400
5565
|
var index = objLength;
|
5401
5566
|
while (index--) {
|
5402
5567
|
var key = objProps[index];
|
5403
|
-
if (!(isPartial ? key in other :
|
5568
|
+
if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
|
5404
5569
|
return false;
|
5405
5570
|
}
|
5406
5571
|
}
|
@@ -5536,19 +5701,6 @@
|
|
5536
5701
|
return arguments.length ? result(arguments[0], arguments[1]) : result;
|
5537
5702
|
}
|
5538
5703
|
|
5539
|
-
/**
|
5540
|
-
* Gets the "length" property value of `object`.
|
5541
|
-
*
|
5542
|
-
* **Note:** This function is used to avoid a
|
5543
|
-
* [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) that affects
|
5544
|
-
* Safari on at least iOS 8.1-8.3 ARM64.
|
5545
|
-
*
|
5546
|
-
* @private
|
5547
|
-
* @param {Object} object The object to query.
|
5548
|
-
* @returns {*} Returns the "length" value.
|
5549
|
-
*/
|
5550
|
-
var getLength = baseProperty('length');
|
5551
|
-
|
5552
5704
|
/**
|
5553
5705
|
* Gets the data for `map`.
|
5554
5706
|
*
|
@@ -5597,15 +5749,6 @@
|
|
5597
5749
|
return baseIsNative(value) ? value : undefined;
|
5598
5750
|
}
|
5599
5751
|
|
5600
|
-
/**
|
5601
|
-
* Gets the `[[Prototype]]` of `value`.
|
5602
|
-
*
|
5603
|
-
* @private
|
5604
|
-
* @param {*} value The value to query.
|
5605
|
-
* @returns {null|Object} Returns the `[[Prototype]]`.
|
5606
|
-
*/
|
5607
|
-
var getPrototype = overArg(nativeGetPrototype, Object);
|
5608
|
-
|
5609
5752
|
/**
|
5610
5753
|
* Creates an array of the own enumerable symbol properties of `object`.
|
5611
5754
|
*
|
@@ -5642,7 +5785,7 @@
|
|
5642
5785
|
var getTag = baseGetTag;
|
5643
5786
|
|
5644
5787
|
// Fallback for data views, maps, sets, and weak maps in IE 11,
|
5645
|
-
// for data views in Edge, and promises in Node.js.
|
5788
|
+
// for data views in Edge < 14, and promises in Node.js.
|
5646
5789
|
if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
|
5647
5790
|
(Map && getTag(new Map) != mapTag) ||
|
5648
5791
|
(Promise && getTag(Promise.resolve()) != promiseTag) ||
|
@@ -5734,7 +5877,7 @@
|
|
5734
5877
|
}
|
5735
5878
|
var length = object ? object.length : 0;
|
5736
5879
|
return !!length && isLength(length) && isIndex(key, length) &&
|
5737
|
-
(isArray(object) ||
|
5880
|
+
(isArray(object) || isArguments(object));
|
5738
5881
|
}
|
5739
5882
|
|
5740
5883
|
/**
|
@@ -5818,23 +5961,6 @@
|
|
5818
5961
|
}
|
5819
5962
|
}
|
5820
5963
|
|
5821
|
-
/**
|
5822
|
-
* Creates an array of index keys for `object` values of arrays,
|
5823
|
-
* `arguments` objects, and strings, otherwise `null` is returned.
|
5824
|
-
*
|
5825
|
-
* @private
|
5826
|
-
* @param {Object} object The object to query.
|
5827
|
-
* @returns {Array|null} Returns index keys, else `null`.
|
5828
|
-
*/
|
5829
|
-
function indexKeys(object) {
|
5830
|
-
var length = object ? object.length : undefined;
|
5831
|
-
if (isLength(length) &&
|
5832
|
-
(isArray(object) || isString(object) || isArguments(object))) {
|
5833
|
-
return baseTimes(length, String);
|
5834
|
-
}
|
5835
|
-
return null;
|
5836
|
-
}
|
5837
|
-
|
5838
5964
|
/**
|
5839
5965
|
* Inserts wrapper `details` in a comment at the top of the `source` body.
|
5840
5966
|
*
|
@@ -6119,6 +6245,25 @@
|
|
6119
6245
|
return objValue;
|
6120
6246
|
}
|
6121
6247
|
|
6248
|
+
/**
|
6249
|
+
* This function is like
|
6250
|
+
* [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
|
6251
|
+
* except that it includes inherited enumerable properties.
|
6252
|
+
*
|
6253
|
+
* @private
|
6254
|
+
* @param {Object} object The object to query.
|
6255
|
+
* @returns {Array} Returns the array of property names.
|
6256
|
+
*/
|
6257
|
+
function nativeKeysIn(object) {
|
6258
|
+
var result = [];
|
6259
|
+
if (object != null) {
|
6260
|
+
for (var key in Object(object)) {
|
6261
|
+
result.push(key);
|
6262
|
+
}
|
6263
|
+
}
|
6264
|
+
return result;
|
6265
|
+
}
|
6266
|
+
|
6122
6267
|
/**
|
6123
6268
|
* Gets the parent value at `path` of `object`.
|
6124
6269
|
*
|
@@ -6187,6 +6332,18 @@
|
|
6187
6332
|
};
|
6188
6333
|
}());
|
6189
6334
|
|
6335
|
+
/**
|
6336
|
+
* A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
|
6337
|
+
*
|
6338
|
+
* @private
|
6339
|
+
* @param {Function} func The function to delay.
|
6340
|
+
* @param {number} wait The number of milliseconds to delay invocation.
|
6341
|
+
* @returns {number|Object} Returns the timer id or timeout object.
|
6342
|
+
*/
|
6343
|
+
var setTimeout = ctxSetTimeout || function(func, wait) {
|
6344
|
+
return root.setTimeout(func, wait);
|
6345
|
+
};
|
6346
|
+
|
6190
6347
|
/**
|
6191
6348
|
* Sets the `toString` method of `wrapper` to mimic the source of `reference`
|
6192
6349
|
* with wrapper details in a comment at the top of the source body.
|
@@ -6407,7 +6564,7 @@
|
|
6407
6564
|
|
6408
6565
|
/**
|
6409
6566
|
* Creates an array of `array` values not included in the other given arrays
|
6410
|
-
* using [`SameValueZero`](http://ecma-international.org/ecma-262/
|
6567
|
+
* using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
6411
6568
|
* for equality comparisons. The order of result values is determined by the
|
6412
6569
|
* order they occur in the first array.
|
6413
6570
|
*
|
@@ -6701,7 +6858,7 @@
|
|
6701
6858
|
* @memberOf _
|
6702
6859
|
* @since 1.1.0
|
6703
6860
|
* @category Array
|
6704
|
-
* @param {Array} array The array to
|
6861
|
+
* @param {Array} array The array to inspect.
|
6705
6862
|
* @param {Function} [predicate=_.identity]
|
6706
6863
|
* The function invoked per iteration.
|
6707
6864
|
* @param {number} [fromIndex=0] The index to search from.
|
@@ -6749,7 +6906,7 @@
|
|
6749
6906
|
* @memberOf _
|
6750
6907
|
* @since 2.0.0
|
6751
6908
|
* @category Array
|
6752
|
-
* @param {Array} array The array to
|
6909
|
+
* @param {Array} array The array to inspect.
|
6753
6910
|
* @param {Function} [predicate=_.identity]
|
6754
6911
|
* The function invoked per iteration.
|
6755
6912
|
* @param {number} [fromIndex=array.length-1] The index to search from.
|
@@ -6910,7 +7067,7 @@
|
|
6910
7067
|
|
6911
7068
|
/**
|
6912
7069
|
* Gets the index at which the first occurrence of `value` is found in `array`
|
6913
|
-
* using [`SameValueZero`](http://ecma-international.org/ecma-262/
|
7070
|
+
* using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
6914
7071
|
* for equality comparisons. If `fromIndex` is negative, it's used as the
|
6915
7072
|
* offset from the end of `array`.
|
6916
7073
|
*
|
@@ -6918,7 +7075,7 @@
|
|
6918
7075
|
* @memberOf _
|
6919
7076
|
* @since 0.1.0
|
6920
7077
|
* @category Array
|
6921
|
-
* @param {Array} array The array to
|
7078
|
+
* @param {Array} array The array to inspect.
|
6922
7079
|
* @param {*} value The value to search for.
|
6923
7080
|
* @param {number} [fromIndex=0] The index to search from.
|
6924
7081
|
* @returns {number} Returns the index of the matched value, else `-1`.
|
@@ -6958,12 +7115,13 @@
|
|
6958
7115
|
* // => [1, 2]
|
6959
7116
|
*/
|
6960
7117
|
function initial(array) {
|
6961
|
-
|
7118
|
+
var length = array ? array.length : 0;
|
7119
|
+
return length ? baseSlice(array, 0, -1) : [];
|
6962
7120
|
}
|
6963
7121
|
|
6964
7122
|
/**
|
6965
7123
|
* Creates an array of unique values that are included in all given arrays
|
6966
|
-
* using [`SameValueZero`](http://ecma-international.org/ecma-262/
|
7124
|
+
* using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
6967
7125
|
* for equality comparisons. The order of result values is determined by the
|
6968
7126
|
* order they occur in the first array.
|
6969
7127
|
*
|
@@ -7102,7 +7260,7 @@
|
|
7102
7260
|
* @memberOf _
|
7103
7261
|
* @since 0.1.0
|
7104
7262
|
* @category Array
|
7105
|
-
* @param {Array} array The array to
|
7263
|
+
* @param {Array} array The array to inspect.
|
7106
7264
|
* @param {*} value The value to search for.
|
7107
7265
|
* @param {number} [fromIndex=array.length-1] The index to search from.
|
7108
7266
|
* @returns {number} Returns the index of the matched value, else `-1`.
|
@@ -7167,7 +7325,7 @@
|
|
7167
7325
|
|
7168
7326
|
/**
|
7169
7327
|
* Removes all given values from `array` using
|
7170
|
-
* [`SameValueZero`](http://ecma-international.org/ecma-262/
|
7328
|
+
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
7171
7329
|
* for equality comparisons.
|
7172
7330
|
*
|
7173
7331
|
* **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
|
@@ -7480,7 +7638,7 @@
|
|
7480
7638
|
* @memberOf _
|
7481
7639
|
* @since 4.0.0
|
7482
7640
|
* @category Array
|
7483
|
-
* @param {Array} array The array to
|
7641
|
+
* @param {Array} array The array to inspect.
|
7484
7642
|
* @param {*} value The value to search for.
|
7485
7643
|
* @returns {number} Returns the index of the matched value, else `-1`.
|
7486
7644
|
* @example
|
@@ -7559,7 +7717,7 @@
|
|
7559
7717
|
* @memberOf _
|
7560
7718
|
* @since 4.0.0
|
7561
7719
|
* @category Array
|
7562
|
-
* @param {Array} array The array to
|
7720
|
+
* @param {Array} array The array to inspect.
|
7563
7721
|
* @param {*} value The value to search for.
|
7564
7722
|
* @returns {number} Returns the index of the matched value, else `-1`.
|
7565
7723
|
* @example
|
@@ -7636,7 +7794,8 @@
|
|
7636
7794
|
* // => [2, 3]
|
7637
7795
|
*/
|
7638
7796
|
function tail(array) {
|
7639
|
-
|
7797
|
+
var length = array ? array.length : 0;
|
7798
|
+
return length ? baseSlice(array, 1, length) : [];
|
7640
7799
|
}
|
7641
7800
|
|
7642
7801
|
/**
|
@@ -7793,7 +7952,7 @@
|
|
7793
7952
|
|
7794
7953
|
/**
|
7795
7954
|
* Creates an array of unique values, in order, from all given arrays using
|
7796
|
-
* [`SameValueZero`](http://ecma-international.org/ecma-262/
|
7955
|
+
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
7797
7956
|
* for equality comparisons.
|
7798
7957
|
*
|
7799
7958
|
* @static
|
@@ -7874,7 +8033,7 @@
|
|
7874
8033
|
|
7875
8034
|
/**
|
7876
8035
|
* Creates a duplicate-free version of an array, using
|
7877
|
-
* [`SameValueZero`](http://ecma-international.org/ecma-262/
|
8036
|
+
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
7878
8037
|
* for equality comparisons, in which only the first occurrence of each
|
7879
8038
|
* element is kept.
|
7880
8039
|
*
|
@@ -8019,7 +8178,7 @@
|
|
8019
8178
|
|
8020
8179
|
/**
|
8021
8180
|
* Creates an array excluding all given values using
|
8022
|
-
* [`SameValueZero`](http://ecma-international.org/ecma-262/
|
8181
|
+
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
8023
8182
|
* for equality comparisons.
|
8024
8183
|
*
|
8025
8184
|
* **Note:** Unlike `_.pull`, this method returns a new array.
|
@@ -8590,6 +8749,11 @@
|
|
8590
8749
|
* Iteration is stopped once `predicate` returns falsey. The predicate is
|
8591
8750
|
* invoked with three arguments: (value, index|key, collection).
|
8592
8751
|
*
|
8752
|
+
* **Note:** This method returns `true` for
|
8753
|
+
* [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
|
8754
|
+
* [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
|
8755
|
+
* elements of empty collections.
|
8756
|
+
*
|
8593
8757
|
* @static
|
8594
8758
|
* @memberOf _
|
8595
8759
|
* @since 0.1.0
|
@@ -8682,7 +8846,7 @@
|
|
8682
8846
|
* @memberOf _
|
8683
8847
|
* @since 0.1.0
|
8684
8848
|
* @category Collection
|
8685
|
-
* @param {Array|Object} collection The collection to
|
8849
|
+
* @param {Array|Object} collection The collection to inspect.
|
8686
8850
|
* @param {Function} [predicate=_.identity]
|
8687
8851
|
* The function invoked per iteration.
|
8688
8852
|
* @param {number} [fromIndex=0] The index to search from.
|
@@ -8720,7 +8884,7 @@
|
|
8720
8884
|
* @memberOf _
|
8721
8885
|
* @since 2.0.0
|
8722
8886
|
* @category Collection
|
8723
|
-
* @param {Array|Object} collection The collection to
|
8887
|
+
* @param {Array|Object} collection The collection to inspect.
|
8724
8888
|
* @param {Function} [predicate=_.identity]
|
8725
8889
|
* The function invoked per iteration.
|
8726
8890
|
* @param {number} [fromIndex=collection.length-1] The index to search from.
|
@@ -8907,7 +9071,7 @@
|
|
8907
9071
|
/**
|
8908
9072
|
* Checks if `value` is in `collection`. If `collection` is a string, it's
|
8909
9073
|
* checked for a substring of `value`, otherwise
|
8910
|
-
* [`SameValueZero`](http://ecma-international.org/ecma-262/
|
9074
|
+
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
8911
9075
|
* is used for equality comparisons. If `fromIndex` is negative, it's used as
|
8912
9076
|
* the offset from the end of `collection`.
|
8913
9077
|
*
|
@@ -8915,7 +9079,7 @@
|
|
8915
9079
|
* @memberOf _
|
8916
9080
|
* @since 0.1.0
|
8917
9081
|
* @category Collection
|
8918
|
-
* @param {Array|Object|string} collection The collection to
|
9082
|
+
* @param {Array|Object|string} collection The collection to inspect.
|
8919
9083
|
* @param {*} value The value to search for.
|
8920
9084
|
* @param {number} [fromIndex=0] The index to search from.
|
8921
9085
|
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
|
@@ -9348,7 +9512,7 @@
|
|
9348
9512
|
* @memberOf _
|
9349
9513
|
* @since 0.1.0
|
9350
9514
|
* @category Collection
|
9351
|
-
* @param {Array|Object} collection The collection to inspect.
|
9515
|
+
* @param {Array|Object|string} collection The collection to inspect.
|
9352
9516
|
* @returns {number} Returns the collection size.
|
9353
9517
|
* @example
|
9354
9518
|
*
|
@@ -9366,16 +9530,13 @@
|
|
9366
9530
|
return 0;
|
9367
9531
|
}
|
9368
9532
|
if (isArrayLike(collection)) {
|
9369
|
-
|
9370
|
-
return (result && isString(collection)) ? stringSize(collection) : result;
|
9533
|
+
return isString(collection) ? stringSize(collection) : collection.length;
|
9371
9534
|
}
|
9372
|
-
|
9373
|
-
|
9374
|
-
|
9375
|
-
return collection.size;
|
9376
|
-
}
|
9535
|
+
var tag = getTag(collection);
|
9536
|
+
if (tag == mapTag || tag == setTag) {
|
9537
|
+
return collection.size;
|
9377
9538
|
}
|
9378
|
-
return
|
9539
|
+
return baseKeys(collection).length;
|
9379
9540
|
}
|
9380
9541
|
|
9381
9542
|
/**
|
@@ -9487,9 +9648,9 @@
|
|
9487
9648
|
* }, _.now());
|
9488
9649
|
* // => Logs the number of milliseconds it took for the deferred invocation.
|
9489
9650
|
*/
|
9490
|
-
|
9491
|
-
return Date.now();
|
9492
|
-
}
|
9651
|
+
var now = ctxNow || function() {
|
9652
|
+
return root.Date.now();
|
9653
|
+
};
|
9493
9654
|
|
9494
9655
|
/*------------------------------------------------------------------------*/
|
9495
9656
|
|
@@ -10030,7 +10191,7 @@
|
|
10030
10191
|
* **Note:** The cache is exposed as the `cache` property on the memoized
|
10031
10192
|
* function. Its creation may be customized by replacing the `_.memoize.Cache`
|
10032
10193
|
* constructor with one whose instances implement the
|
10033
|
-
* [`Map`](http://ecma-international.org/ecma-262/
|
10194
|
+
* [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
|
10034
10195
|
* method interface of `delete`, `get`, `has`, and `set`.
|
10035
10196
|
*
|
10036
10197
|
* @static
|
@@ -10330,7 +10491,7 @@
|
|
10330
10491
|
/**
|
10331
10492
|
* Creates a function that invokes `func` with the `this` binding of the
|
10332
10493
|
* create function and an array of arguments much like
|
10333
|
-
* [`Function#apply`](http://www.ecma-international.org/ecma-262/
|
10494
|
+
* [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
|
10334
10495
|
*
|
10335
10496
|
* **Note:** This method is based on the
|
10336
10497
|
* [spread operator](https://mdn.io/spread_operator).
|
@@ -10677,7 +10838,7 @@
|
|
10677
10838
|
|
10678
10839
|
/**
|
10679
10840
|
* Performs a
|
10680
|
-
* [`SameValueZero`](http://ecma-international.org/ecma-262/
|
10841
|
+
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
10681
10842
|
* comparison between two values to determine if they are equivalent.
|
10682
10843
|
*
|
10683
10844
|
* @static
|
@@ -10782,7 +10943,7 @@
|
|
10782
10943
|
* // => false
|
10783
10944
|
*/
|
10784
10945
|
function isArguments(value) {
|
10785
|
-
// Safari 8.1
|
10946
|
+
// Safari 8.1 makes `arguments.callee` enumerable in strict mode.
|
10786
10947
|
return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
|
10787
10948
|
(!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
|
10788
10949
|
}
|
@@ -10857,7 +11018,7 @@
|
|
10857
11018
|
* // => false
|
10858
11019
|
*/
|
10859
11020
|
function isArrayLike(value) {
|
10860
|
-
return value != null && isLength(
|
11021
|
+
return value != null && isLength(value.length) && !isFunction(value);
|
10861
11022
|
}
|
10862
11023
|
|
10863
11024
|
/**
|
@@ -10957,8 +11118,7 @@
|
|
10957
11118
|
* @since 0.1.0
|
10958
11119
|
* @category Lang
|
10959
11120
|
* @param {*} value The value to check.
|
10960
|
-
* @returns {boolean} Returns `true` if `value` is a DOM element,
|
10961
|
-
* else `false`.
|
11121
|
+
* @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
|
10962
11122
|
* @example
|
10963
11123
|
*
|
10964
11124
|
* _.isElement(document.body);
|
@@ -11006,22 +11166,23 @@
|
|
11006
11166
|
*/
|
11007
11167
|
function isEmpty(value) {
|
11008
11168
|
if (isArrayLike(value) &&
|
11009
|
-
(isArray(value) ||
|
11010
|
-
|
11169
|
+
(isArray(value) || typeof value == 'string' ||
|
11170
|
+
typeof value.splice == 'function' || isBuffer(value) || isArguments(value))) {
|
11011
11171
|
return !value.length;
|
11012
11172
|
}
|
11013
|
-
|
11014
|
-
|
11015
|
-
|
11016
|
-
|
11017
|
-
|
11173
|
+
var tag = getTag(value);
|
11174
|
+
if (tag == mapTag || tag == setTag) {
|
11175
|
+
return !value.size;
|
11176
|
+
}
|
11177
|
+
if (nonEnumShadows || isPrototype(value)) {
|
11178
|
+
return !nativeKeys(value).length;
|
11018
11179
|
}
|
11019
11180
|
for (var key in value) {
|
11020
11181
|
if (hasOwnProperty.call(value, key)) {
|
11021
11182
|
return false;
|
11022
11183
|
}
|
11023
11184
|
}
|
11024
|
-
return
|
11185
|
+
return true;
|
11025
11186
|
}
|
11026
11187
|
|
11027
11188
|
/**
|
@@ -11040,8 +11201,7 @@
|
|
11040
11201
|
* @category Lang
|
11041
11202
|
* @param {*} value The value to compare.
|
11042
11203
|
* @param {*} other The other value to compare.
|
11043
|
-
* @returns {boolean} Returns `true` if the values are equivalent,
|
11044
|
-
* else `false`.
|
11204
|
+
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
|
11045
11205
|
* @example
|
11046
11206
|
*
|
11047
11207
|
* var object = { 'a': 1 };
|
@@ -11070,8 +11230,7 @@
|
|
11070
11230
|
* @param {*} value The value to compare.
|
11071
11231
|
* @param {*} other The other value to compare.
|
11072
11232
|
* @param {Function} [customizer] The function to customize comparisons.
|
11073
|
-
* @returns {boolean} Returns `true` if the values are equivalent,
|
11074
|
-
* else `false`.
|
11233
|
+
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
|
11075
11234
|
* @example
|
11076
11235
|
*
|
11077
11236
|
* function isGreeting(value) {
|
@@ -11105,8 +11264,7 @@
|
|
11105
11264
|
* @since 3.0.0
|
11106
11265
|
* @category Lang
|
11107
11266
|
* @param {*} value The value to check.
|
11108
|
-
* @returns {boolean} Returns `true` if `value` is an error object,
|
11109
|
-
* else `false`.
|
11267
|
+
* @returns {boolean} Returns `true` if `value` is an error object, else `false`.
|
11110
11268
|
* @example
|
11111
11269
|
*
|
11112
11270
|
* _.isError(new Error);
|
@@ -11134,8 +11292,7 @@
|
|
11134
11292
|
* @since 0.1.0
|
11135
11293
|
* @category Lang
|
11136
11294
|
* @param {*} value The value to check.
|
11137
|
-
* @returns {boolean} Returns `true` if `value` is a finite number,
|
11138
|
-
* else `false`.
|
11295
|
+
* @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
|
11139
11296
|
* @example
|
11140
11297
|
*
|
11141
11298
|
* _.isFinite(3);
|
@@ -11173,8 +11330,7 @@
|
|
11173
11330
|
*/
|
11174
11331
|
function isFunction(value) {
|
11175
11332
|
// The use of `Object#toString` avoids issues with the `typeof` operator
|
11176
|
-
// in Safari 8 which returns 'object' for typed array and
|
11177
|
-
// and PhantomJS 1.9 which returns 'function' for `NodeList` instances.
|
11333
|
+
// in Safari 8-9 which returns 'object' for typed array and other constructors.
|
11178
11334
|
var tag = isObject(value) ? objectToString.call(value) : '';
|
11179
11335
|
return tag == funcTag || tag == genTag;
|
11180
11336
|
}
|
@@ -11212,16 +11368,15 @@
|
|
11212
11368
|
/**
|
11213
11369
|
* Checks if `value` is a valid array-like length.
|
11214
11370
|
*
|
11215
|
-
* **Note:** This
|
11216
|
-
* [`ToLength`](http://ecma-international.org/ecma-262/
|
11371
|
+
* **Note:** This method is loosely based on
|
11372
|
+
* [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
|
11217
11373
|
*
|
11218
11374
|
* @static
|
11219
11375
|
* @memberOf _
|
11220
11376
|
* @since 4.0.0
|
11221
11377
|
* @category Lang
|
11222
11378
|
* @param {*} value The value to check.
|
11223
|
-
* @returns {boolean} Returns `true` if `value` is a valid length,
|
11224
|
-
* else `false`.
|
11379
|
+
* @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
|
11225
11380
|
* @example
|
11226
11381
|
*
|
11227
11382
|
* _.isLength(3);
|
@@ -11243,7 +11398,7 @@
|
|
11243
11398
|
|
11244
11399
|
/**
|
11245
11400
|
* Checks if `value` is the
|
11246
|
-
* [language type](http://www.ecma-international.org/ecma-262/
|
11401
|
+
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
|
11247
11402
|
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
|
11248
11403
|
*
|
11249
11404
|
* @static
|
@@ -11322,8 +11477,12 @@
|
|
11322
11477
|
* Performs a partial deep comparison between `object` and `source` to
|
11323
11478
|
* determine if `object` contains equivalent property values.
|
11324
11479
|
*
|
11325
|
-
* **Note:** This method
|
11326
|
-
*
|
11480
|
+
* **Note:** This method is equivalent to `_.matches` when `source` is
|
11481
|
+
* partially applied.
|
11482
|
+
*
|
11483
|
+
* Partial comparisons will match empty array and empty object `source`
|
11484
|
+
* values against any array or object value, respectively. See `_.isEqual`
|
11485
|
+
* for a list of supported value comparisons.
|
11327
11486
|
*
|
11328
11487
|
* @static
|
11329
11488
|
* @memberOf _
|
@@ -11536,8 +11695,7 @@
|
|
11536
11695
|
* @since 0.8.0
|
11537
11696
|
* @category Lang
|
11538
11697
|
* @param {*} value The value to check.
|
11539
|
-
* @returns {boolean} Returns `true` if `value` is a plain object,
|
11540
|
-
* else `false`.
|
11698
|
+
* @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
|
11541
11699
|
* @example
|
11542
11700
|
*
|
11543
11701
|
* function Foo() {
|
@@ -11601,8 +11759,7 @@
|
|
11601
11759
|
* @since 4.0.0
|
11602
11760
|
* @category Lang
|
11603
11761
|
* @param {*} value The value to check.
|
11604
|
-
* @returns {boolean} Returns `true` if `value` is a safe integer,
|
11605
|
-
* else `false`.
|
11762
|
+
* @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
|
11606
11763
|
* @example
|
11607
11764
|
*
|
11608
11765
|
* _.isSafeInteger(3);
|
@@ -11896,7 +12053,7 @@
|
|
11896
12053
|
* Converts `value` to an integer.
|
11897
12054
|
*
|
11898
12055
|
* **Note:** This method is loosely based on
|
11899
|
-
* [`ToInteger`](http://www.ecma-international.org/ecma-262/
|
12056
|
+
* [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
|
11900
12057
|
*
|
11901
12058
|
* @static
|
11902
12059
|
* @memberOf _
|
@@ -11930,7 +12087,7 @@
|
|
11930
12087
|
* array-like object.
|
11931
12088
|
*
|
11932
12089
|
* **Note:** This method is based on
|
11933
|
-
* [`ToLength`](http://ecma-international.org/ecma-262/
|
12090
|
+
* [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
|
11934
12091
|
*
|
11935
12092
|
* @static
|
11936
12093
|
* @memberOf _
|
@@ -11987,7 +12144,7 @@
|
|
11987
12144
|
return NAN;
|
11988
12145
|
}
|
11989
12146
|
if (isObject(value)) {
|
11990
|
-
var other =
|
12147
|
+
var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
|
11991
12148
|
value = isObject(other) ? (other + '') : other;
|
11992
12149
|
}
|
11993
12150
|
if (typeof value != 'string') {
|
@@ -12159,13 +12316,7 @@
|
|
12159
12316
|
* // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
|
12160
12317
|
*/
|
12161
12318
|
var assignIn = createAssigner(function(object, source) {
|
12162
|
-
|
12163
|
-
copyObject(source, keysIn(source), object);
|
12164
|
-
return;
|
12165
|
-
}
|
12166
|
-
for (var key in source) {
|
12167
|
-
assignValue(object, key, source[key]);
|
12168
|
-
}
|
12319
|
+
copyObject(source, keysIn(source), object);
|
12169
12320
|
});
|
12170
12321
|
|
12171
12322
|
/**
|
@@ -12351,7 +12502,7 @@
|
|
12351
12502
|
* @memberOf _
|
12352
12503
|
* @since 1.1.0
|
12353
12504
|
* @category Object
|
12354
|
-
* @param {Object} object The object to
|
12505
|
+
* @param {Object} object The object to inspect.
|
12355
12506
|
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
12356
12507
|
* @returns {string|undefined} Returns the key of the matched element,
|
12357
12508
|
* else `undefined`.
|
@@ -12390,7 +12541,7 @@
|
|
12390
12541
|
* @memberOf _
|
12391
12542
|
* @since 2.0.0
|
12392
12543
|
* @category Object
|
12393
|
-
* @param {Object} object The object to
|
12544
|
+
* @param {Object} object The object to inspect.
|
12394
12545
|
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
12395
12546
|
* @returns {string|undefined} Returns the key of the matched element,
|
12396
12547
|
* else `undefined`.
|
@@ -12774,7 +12925,7 @@
|
|
12774
12925
|
* Creates an array of the own enumerable property names of `object`.
|
12775
12926
|
*
|
12776
12927
|
* **Note:** Non-object values are coerced to objects. See the
|
12777
|
-
* [ES spec](http://ecma-international.org/ecma-262/
|
12928
|
+
* [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
|
12778
12929
|
* for more details.
|
12779
12930
|
*
|
12780
12931
|
* @static
|
@@ -12799,23 +12950,7 @@
|
|
12799
12950
|
* // => ['0', '1']
|
12800
12951
|
*/
|
12801
12952
|
function keys(object) {
|
12802
|
-
|
12803
|
-
if (!(isProto || isArrayLike(object))) {
|
12804
|
-
return baseKeys(object);
|
12805
|
-
}
|
12806
|
-
var indexes = indexKeys(object),
|
12807
|
-
skipIndexes = !!indexes,
|
12808
|
-
result = indexes || [],
|
12809
|
-
length = result.length;
|
12810
|
-
|
12811
|
-
for (var key in object) {
|
12812
|
-
if (baseHas(object, key) &&
|
12813
|
-
!(skipIndexes && (key == 'length' || isIndex(key, length))) &&
|
12814
|
-
!(isProto && key == 'constructor')) {
|
12815
|
-
result.push(key);
|
12816
|
-
}
|
12817
|
-
}
|
12818
|
-
return result;
|
12953
|
+
return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
|
12819
12954
|
}
|
12820
12955
|
|
12821
12956
|
/**
|
@@ -12842,23 +12977,7 @@
|
|
12842
12977
|
* // => ['a', 'b', 'c'] (iteration order is not guaranteed)
|
12843
12978
|
*/
|
12844
12979
|
function keysIn(object) {
|
12845
|
-
|
12846
|
-
isProto = isPrototype(object),
|
12847
|
-
props = baseKeysIn(object),
|
12848
|
-
propsLength = props.length,
|
12849
|
-
indexes = indexKeys(object),
|
12850
|
-
skipIndexes = !!indexes,
|
12851
|
-
result = indexes || [],
|
12852
|
-
length = result.length;
|
12853
|
-
|
12854
|
-
while (++index < propsLength) {
|
12855
|
-
var key = props[index];
|
12856
|
-
if (!(skipIndexes && (key == 'length' || isIndex(key, length))) &&
|
12857
|
-
!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
|
12858
|
-
result.push(key);
|
12859
|
-
}
|
12860
|
-
}
|
12861
|
-
return result;
|
12980
|
+
return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
|
12862
12981
|
}
|
12863
12982
|
|
12864
12983
|
/**
|
@@ -13664,8 +13783,9 @@
|
|
13664
13783
|
|
13665
13784
|
/**
|
13666
13785
|
* Deburrs `string` by converting
|
13667
|
-
* [
|
13668
|
-
*
|
13786
|
+
* [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
|
13787
|
+
* and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
|
13788
|
+
* letters to basic Latin letters and removing
|
13669
13789
|
* [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
|
13670
13790
|
*
|
13671
13791
|
* @static
|
@@ -13681,7 +13801,7 @@
|
|
13681
13801
|
*/
|
13682
13802
|
function deburr(string) {
|
13683
13803
|
string = toString(string);
|
13684
|
-
return string && string.replace(
|
13804
|
+
return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
|
13685
13805
|
}
|
13686
13806
|
|
13687
13807
|
/**
|
@@ -13691,7 +13811,7 @@
|
|
13691
13811
|
* @memberOf _
|
13692
13812
|
* @since 3.0.0
|
13693
13813
|
* @category String
|
13694
|
-
* @param {string} [string=''] The string to
|
13814
|
+
* @param {string} [string=''] The string to inspect.
|
13695
13815
|
* @param {string} [target] The string to search for.
|
13696
13816
|
* @param {number} [position=string.length] The position to search up to.
|
13697
13817
|
* @returns {boolean} Returns `true` if `string` ends with `target`,
|
@@ -14047,7 +14167,7 @@
|
|
14047
14167
|
var args = arguments,
|
14048
14168
|
string = toString(args[0]);
|
14049
14169
|
|
14050
|
-
return args.length < 3 ? string :
|
14170
|
+
return args.length < 3 ? string : string.replace(args[1], args[2]);
|
14051
14171
|
}
|
14052
14172
|
|
14053
14173
|
/**
|
@@ -14108,11 +14228,11 @@
|
|
14108
14228
|
(separator != null && !isRegExp(separator))
|
14109
14229
|
)) {
|
14110
14230
|
separator = baseToString(separator);
|
14111
|
-
if (separator
|
14231
|
+
if (!separator && hasUnicode(string)) {
|
14112
14232
|
return castSlice(stringToArray(string), 0, limit);
|
14113
14233
|
}
|
14114
14234
|
}
|
14115
|
-
return
|
14235
|
+
return string.split(separator, limit);
|
14116
14236
|
}
|
14117
14237
|
|
14118
14238
|
/**
|
@@ -14147,7 +14267,7 @@
|
|
14147
14267
|
* @memberOf _
|
14148
14268
|
* @since 3.0.0
|
14149
14269
|
* @category String
|
14150
|
-
* @param {string} [string=''] The string to
|
14270
|
+
* @param {string} [string=''] The string to inspect.
|
14151
14271
|
* @param {string} [target] The string to search for.
|
14152
14272
|
* @param {number} [position=0] The position to search from.
|
14153
14273
|
* @returns {boolean} Returns `true` if `string` starts with `target`,
|
@@ -14584,7 +14704,7 @@
|
|
14584
14704
|
string = toString(string);
|
14585
14705
|
|
14586
14706
|
var strLength = string.length;
|
14587
|
-
if (
|
14707
|
+
if (hasUnicode(string)) {
|
14588
14708
|
var strSymbols = stringToArray(string);
|
14589
14709
|
strLength = strSymbols.length;
|
14590
14710
|
}
|
@@ -14721,7 +14841,7 @@
|
|
14721
14841
|
pattern = guard ? undefined : pattern;
|
14722
14842
|
|
14723
14843
|
if (pattern === undefined) {
|
14724
|
-
|
14844
|
+
return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
|
14725
14845
|
}
|
14726
14846
|
return string.match(pattern) || [];
|
14727
14847
|
}
|
@@ -15038,8 +15158,12 @@
|
|
15038
15158
|
* object and `source`, returning `true` if the given object has equivalent
|
15039
15159
|
* property values, else `false`.
|
15040
15160
|
*
|
15041
|
-
* **Note:** The created function
|
15042
|
-
*
|
15161
|
+
* **Note:** The created function is equivalent to `_.isMatch` with `source`
|
15162
|
+
* partially applied.
|
15163
|
+
*
|
15164
|
+
* Partial comparisons will match empty array and empty object `source`
|
15165
|
+
* values against any array or object value, respectively. See `_.isEqual`
|
15166
|
+
* for a list of supported value comparisons.
|
15043
15167
|
*
|
15044
15168
|
* @static
|
15045
15169
|
* @memberOf _
|
@@ -15066,7 +15190,9 @@
|
|
15066
15190
|
* value at `path` of a given object to `srcValue`, returning `true` if the
|
15067
15191
|
* object value is equivalent, else `false`.
|
15068
15192
|
*
|
15069
|
-
* **Note:**
|
15193
|
+
* **Note:** Partial comparisons will match empty array and empty object
|
15194
|
+
* `srcValue` values against any array or object value, respectively. See
|
15195
|
+
* `_.isEqual` for a list of supported value comparisons.
|
15070
15196
|
*
|
15071
15197
|
* @static
|
15072
15198
|
* @memberOf _
|