¶lodash.js |
|
|
license
lodash
3.10.0 (Custom Build) https://lodash.com/
Build:
lodash modern -o ./lodash.js
Copyright 2012-2015 The Dojo Foundation http://dojofoundation.org/
Based on Underscore.js 1.8.3 http://underscorejs.org/LICENSE
Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
Available under MIT license https://lodash.com/license
|
;(function() {
/** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined;
/** Used as the semantic version number. */
var VERSION = '3.10.0';
/** Used to compose bitmasks for wrapper metadata. */
var BIND_FLAG = 1,
BIND_KEY_FLAG = 2,
CURRY_BOUND_FLAG = 4,
CURRY_FLAG = 8,
CURRY_RIGHT_FLAG = 16,
PARTIAL_FLAG = 32,
PARTIAL_RIGHT_FLAG = 64,
ARY_FLAG = 128,
REARG_FLAG = 256;
/** Used as default options for `_.trunc`. */
var DEFAULT_TRUNC_LENGTH = 30,
DEFAULT_TRUNC_OMISSION = '...';
/** Used to detect when a function becomes hot. */
var HOT_COUNT = 150,
HOT_SPAN = 16;
/** Used as the size to enable large array optimizations. */
var LARGE_ARRAY_SIZE = 200;
/** Used to indicate the type of lazy iteratees. */
var LAZY_FILTER_FLAG = 1,
LAZY_MAP_FLAG = 2;
/** Used as the `TypeError` message for "Functions" methods. */
var FUNC_ERROR_TEXT = 'Expected a function';
/** Used as the internal argument placeholder. */
var PLACEHOLDER = '__lodash_placeholder__';
/** `Object#toString` result references. */
var argsTag = '[object Arguments]',
arrayTag = '[object Array]',
boolTag = '[object Boolean]',
dateTag = '[object Date]',
errorTag = '[object Error]',
funcTag = '[object Function]',
mapTag = '[object Map]',
numberTag = '[object Number]',
objectTag = '[object Object]',
regexpTag = '[object RegExp]',
setTag = '[object Set]',
stringTag = '[object String]',
weakMapTag = '[object WeakMap]';
var arrayBufferTag = '[object ArrayBuffer]',
float32Tag = '[object Float32Array]',
float64Tag = '[object Float64Array]',
int8Tag = '[object Int8Array]',
int16Tag = '[object Int16Array]',
int32Tag = '[object Int32Array]',
uint8Tag = '[object Uint8Array]',
uint8ClampedTag = '[object Uint8ClampedArray]',
uint16Tag = '[object Uint16Array]',
uint32Tag = '[object Uint32Array]';
/** Used to match empty string literals in compiled template source. */
var reEmptyStringLeading = /\b__p \+= '';/g,
reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
/** Used to match HTML entities and HTML characters. */
var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g,
reUnescapedHtml = /[&<>"'`]/g,
reHasEscapedHtml = RegExp(reEscapedHtml.source),
reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
/** Used to match template delimiters. */
var reEscape = /<%-([\s\S]+?)%>/g,
reEvaluate = /<%([\s\S]+?)%>/g,
reInterpolate = /<%=([\s\S]+?)%>/g;
/** Used to match property names within property paths. */
var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,
reIsPlainProp = /^\w*$/,
rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g;
|
|
Used to match |
var reRegExpChars = /^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,
reHasRegExpChars = RegExp(reRegExpChars.source);
|
|
Used to match combining diacritical marks. /* Used to match backslashes in property paths. / |
var reEscapeChar = /\\(\\)?/g;
/** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */
var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
/** Used to match `RegExp` flags from their coerced string values. */
var reFlags = /\w*$/;
/** Used to detect hexadecimal string values. */
var reHasHexPrefix = /^0[xX]/;
/** Used to detect host constructors (Safari > 5). */
var reIsHostCtor = /^\[object .+?Constructor\]$/;
/** Used to detect unsigned integer values. */
var reIsUint = /^\d+$/;
/** Used to match latin-1 supplementary letters (excluding mathematical operators). */
var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g;
/** Used to ensure capturing order of template delimiters. */
var reNoMatch = /($^)/;
/** Used to match unescaped characters in compiled string literals. */
var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
/** Used to match words to create compound words. */
var reWords = (function() {
var upper = '[A-Z\\xc0-\\xd6\\xd8-\\xde]',
lower = '[a-z\\xdf-\\xf6\\xf8-\\xff]+';
return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g');
}());
/** Used to assign default `context` object properties. */
var contextProps = [
'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array',
'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number',
'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite',
'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array',
'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap'
];
/** Used to make template sourceURLs easier to identify. */
var templateCounter = -1;
/** Used to identify `toStringTag` values of typed arrays. */
var typedArrayTags = {};
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
typedArrayTags[uint32Tag] = true;
typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
typedArrayTags[dateTag] = typedArrayTags[errorTag] =
typedArrayTags[funcTag] = typedArrayTags[mapTag] =
typedArrayTags[numberTag] = typedArrayTags[objectTag] =
typedArrayTags[regexpTag] = typedArrayTags[setTag] =
typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
/** Used to identify `toStringTag` values supported by `_.clone`. */
var cloneableTags = {};
cloneableTags[argsTag] = cloneableTags[arrayTag] =
cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =
cloneableTags[dateTag] = cloneableTags[float32Tag] =
cloneableTags[float64Tag] = cloneableTags[int8Tag] =
cloneableTags[int16Tag] = cloneableTags[int32Tag] =
cloneableTags[numberTag] = cloneableTags[objectTag] =
cloneableTags[regexpTag] = cloneableTags[stringTag] =
cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
cloneableTags[errorTag] = cloneableTags[funcTag] =
cloneableTags[mapTag] = cloneableTags[setTag] =
cloneableTags[weakMapTag] = false;
/** Used to map latin-1 supplementary letters to basic latin letters. */
var deburredLetters = {
'\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
'\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
'\xc7': 'C', '\xe7': 'c',
'\xd0': 'D', '\xf0': 'd',
'\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
'\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
'\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
'\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i',
'\xd1': 'N', '\xf1': 'n',
'\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
'\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
'\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
'\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
'\xdd': 'Y', '\xfd': 'y', '\xff': 'y',
'\xc6': 'Ae', '\xe6': 'ae',
'\xde': 'Th', '\xfe': 'th',
'\xdf': 'ss'
};
/** Used to map characters to HTML entities. */
var htmlEscapes = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": ''',
'`': '`'
};
/** Used to map HTML entities to characters. */
var htmlUnescapes = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
''': "'",
'`': '`'
};
/** Used to determine if values are of the language type `Object`. */
var objectTypes = {
'function': true,
'object': true
};
/** Used to escape characters for inclusion in compiled regexes. */
var regexpEscapes = {
'0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34',
'5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39',
'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46',
'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66',
'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78'
};
/** Used to escape characters for inclusion in compiled string literals. */
var stringEscapes = {
'\\': '\\',
"'": "'",
'\n': 'n',
'\r': 'r',
'\u2028': 'u2028',
'\u2029': 'u2029'
};
/** Detect free variable `exports`. */
var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;
/** Detect free variable `module`. */
var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;
/** Detect free variable `global` from Node.js. */
var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
/** Detect free variable `self`. */
var freeSelf = objectTypes[typeof self] && self && self.Object && self;
/** Detect free variable `window`. */
var freeWindow = objectTypes[typeof window] && window && window.Object && window;
/** Detect the popular CommonJS extension `module.exports`. */
var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;
|
|
Used as a reference to the global object. The |
var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;
/*--------------------------------------------------------------------------*/
|
|
The base implementation of API
private
Params
value
The value to compare.
other
The other value to compare.
Returns
number
Returns the sort order indicator for
value.
|
function baseCompareAscending(value, other) {
if (value !== other) {
var valIsNull = value === null,
valIsUndef = value === undefined,
valIsReflexive = value === value;
var othIsNull = other === null,
othIsUndef = other === undefined,
othIsReflexive = other === other;
if ((value > other && !othIsNull) || !valIsReflexive ||
(valIsNull && !othIsUndef && othIsReflexive) ||
(valIsUndef && othIsReflexive)) {
return 1;
}
if ((value < other && !valIsNull) || !othIsReflexive ||
(othIsNull && !valIsUndef && valIsReflexive) ||
(othIsUndef && valIsReflexive)) {
return -1;
}
}
return 0;
}
|
|
The base implementation of API
private
Params
array
Array
The array to search.
predicate
Function
The function invoked per iteration.
[fromRight]
boolean
Specify iterating from right to left.
Returns
number
Returns the index of the matched value, else
-1.
|
function baseFindIndex(array, predicate, fromRight) {
var length = array.length,
index = fromRight ? length : -1;
while ((fromRight ? index-- : ++index < length)) {
if (predicate(array[index], index, array)) {
return index;
}
}
return -1;
}
|
|
The base implementation of API
private
Params
array
Array
The array to search.
value
*
The value to search for.
fromIndex
number
The index to search from.
Returns
number
Returns the index of the matched value, else
-1.
|
function baseIndexOf(array, value, fromIndex) {
if (value !== value) {
return indexOfNaN(array, fromIndex);
}
var index = fromIndex - 1,
length = array.length;
while (++index < length) {
if (array[index] === value) {
return index;
}
}
return -1;
}
|
|
The base implementation of API
private
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is correctly classified, else false.
|
function baseIsFunction(value) {
|
|
Avoid a Chakra JIT bug in compatibility modes of IE 11. See https://github.com/jashkenas/underscore/issues/1621 for more details. |
return typeof value == 'function' || false;
}
|
|
Converts API
private
Params
value
*
The value to process.
Returns
string
Returns the string.
|
function baseToString(value) {
return value == null ? '' : (value + '');
}
|
|
Used by API
private
Params
string
string
The string to inspect.
chars
string
The characters to find.
Returns
number
Returns the index of the first character not found in
chars.
|
function charsLeftIndex(string, chars) {
var index = -1,
length = string.length;
while (++index < length && chars.indexOf(string.charAt(index)) > -1) {}
return index;
}
|
|
Used by API
private
Params
string
string
The string to inspect.
chars
string
The characters to find.
Returns
number
Returns the index of the last character not found in
chars.
|
function charsRightIndex(string, chars) {
var index = string.length;
while (index-- && chars.indexOf(string.charAt(index)) > -1) {}
return index;
}
|
|
Used by API
private
Params
object
Object
The object to compare.
other
Object
The other object to compare.
Returns
number
Returns the sort order indicator for
object.
|
function compareAscending(object, other) {
return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index);
}
|
|
Used by If API
private
Params
object
Object
The object to compare.
other
Object
The other object to compare.
orders
boolean[]
The order to sort by for each property.
Returns
number
Returns the sort order indicator for
object.
|
function compareMultiple(object, other, orders) {
var index = -1,
objCriteria = object.criteria,
othCriteria = other.criteria,
length = objCriteria.length,
ordersLength = orders.length;
while (++index < length) {
var result = baseCompareAscending(objCriteria[index], othCriteria[index]);
if (result) {
if (index >= ordersLength) {
return result;
}
var order = orders[index];
return result * ((order === 'asc' || order === true) ? 1 : -1);
}
}
|
|
Fixes an This also ensures a stable sort in V8 and other engines. See https://code.google.com/p/v8/issues/detail?id=90 for more details. |
return object.index - other.index;
}
|
|
Used by API
private
Params
letter
string
The matched letter to deburr.
Returns
string
Returns the deburred letter.
|
function deburrLetter(letter) {
return deburredLetters[letter];
}
|
|
Used by API
private
Params
chr
string
The matched character to escape.
Returns
string
Returns the escaped character.
|
function escapeHtmlChar(chr) {
return htmlEscapes[chr];
}
|
|
Used by API
private
Params
chr
string
The matched character to escape.
leadingChar
string
The capture group for a leading character.
whitespaceChar
string
The capture group for a whitespace character.
Returns
string
Returns the escaped character.
|
function escapeRegExpChar(chr, leadingChar, whitespaceChar) {
if (leadingChar) {
chr = regexpEscapes[chr];
} else if (whitespaceChar) {
chr = stringEscapes[chr];
}
return '\\' + chr;
}
|
|
Used by API
private
Params
chr
string
The matched character to escape.
Returns
string
Returns the escaped character.
|
function escapeStringChar(chr) {
return '\\' + stringEscapes[chr];
}
|
|
Gets the index at which the first occurrence of API
private
Params
array
Array
The array to search.
fromIndex
number
The index to search from.
[fromRight]
boolean
Specify iterating from right to left.
Returns
number
Returns the index of the matched
NaN, else -1.
|
function indexOfNaN(array, fromIndex, fromRight) {
var length = array.length,
index = fromIndex + (fromRight ? 0 : -1);
while ((fromRight ? index-- : ++index < length)) {
var other = array[index];
if (other !== other) {
return index;
}
}
return -1;
}
|
|
Checks if API
private
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is object-like, else false.
|
function isObjectLike(value) {
return !!value && typeof value == 'object';
}
|
|
Used by API
private
Params
charCode
number
The character code to inspect.
Returns
boolean
Returns
true if charCode is whitespace, else false.
|
function isSpace(charCode) {
return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 ||
(charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279)));
}
|
|
Replaces all API
private
Params
array
Array
The array to modify.
placeholder
*
The placeholder to replace.
Returns
Array
Returns the new array of placeholder indexes.
|
function replaceHolders(array, placeholder) {
var index = -1,
length = array.length,
resIndex = -1,
result = [];
while (++index < length) {
if (array[index] === placeholder) {
array[index] = PLACEHOLDER;
result[++resIndex] = index;
}
}
return result;
}
|
|
An implementation of API
private
Params
array
Array
The array to inspect.
[iteratee]
Function
The function invoked per iteration.
Returns
Array
Returns the new duplicate-value-free array.
|
function sortedUniq(array, iteratee) {
var seen,
index = -1,
length = array.length,
resIndex = -1,
result = [];
while (++index < length) {
var value = array[index],
computed = iteratee ? iteratee(value, index, array) : value;
if (!index || seen !== computed) {
seen = computed;
result[++resIndex] = value;
}
}
return result;
}
|
|
Used by API
private
Params
string
string
The string to inspect.
Returns
number
Returns the index of the first non-whitespace character.
|
function trimmedLeftIndex(string) {
var index = -1,
length = string.length;
while (++index < length && isSpace(string.charCodeAt(index))) {}
return index;
}
|
|
Used by API
private
Params
string
string
The string to inspect.
Returns
number
Returns the index of the last non-whitespace character.
|
function trimmedRightIndex(string) {
var index = string.length;
while (index-- && isSpace(string.charCodeAt(index))) {}
return index;
}
|
|
Used by API
private
Params
chr
string
The matched character to unescape.
Returns
string
Returns the unescaped character.
|
function unescapeHtmlChar(chr) {
return htmlUnescapes[chr];
}
/*--------------------------------------------------------------------------*/
|
|
Create a new pristine static
memberOf
category
Utility
Params
[context=root]
Object
The context object.
Returns
Function
Returns a new
lodash function.
example
.mixin({
'foo': .constant('foo') });
var lodash = .runInContext();
lodash.mixin({ 'bar': lodash.constant('bar') });
.isFunction(.foo);
// => true
.isFunction(.bar);
// => false
lodash.isFunction(lodash.foo);
// => false
lodash.isFunction(lodash.bar);
// => true
// using
context to mock Date#getTime use in .now
var mock = .runInContext({
'Date': function() {
return { 'getTime': getTimeMock };
}
});
// or creating a suped-up defer in Node.js
var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
|
function runInContext(context) {
|
|
Avoid issues with some ES3 environments that attempt to use values, named
after built-in constructors like |
context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;
/** Native constructor references. */
var Array = context.Array,
Date = context.Date,
Error = context.Error,
Function = context.Function,
Math = context.Math,
Number = context.Number,
Object = context.Object,
RegExp = context.RegExp,
String = context.String,
TypeError = context.TypeError;
/** Used for native method references. */
var arrayProto = Array.prototype,
objectProto = Object.prototype,
stringProto = String.prototype;
/** Used to resolve the decompiled source of functions. */
var fnToString = Function.prototype.toString;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;
/** Used to generate unique IDs. */
var idCounter = 0;
|
|
Used to resolve the |
var objToString = objectProto.toString;
/** Used to restore the original `_` reference in `_.noConflict`. */
var oldDash = root._;
/** Used to detect if a method is native. */
var reIsNative = RegExp('^' +
fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
.replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
);
/** Native method references. */
var ArrayBuffer = context.ArrayBuffer,
clearTimeout = context.clearTimeout,
parseFloat = context.parseFloat,
pow = Math.pow,
propertyIsEnumerable = objectProto.propertyIsEnumerable,
Set = getNative(context, 'Set'),
setTimeout = context.setTimeout,
splice = arrayProto.splice,
Uint8Array = context.Uint8Array,
WeakMap = getNative(context, 'WeakMap');
/* Native method references for those with the same name as other `lodash` methods. */
var nativeCeil = Math.ceil,
nativeCreate = getNative(Object, 'create'),
nativeFloor = Math.floor,
nativeIsArray = getNative(Array, 'isArray'),
nativeIsFinite = context.isFinite,
nativeKeys = getNative(Object, 'keys'),
nativeMax = Math.max,
nativeMin = Math.min,
nativeNow = getNative(Date, 'now'),
nativeParseInt = context.parseInt,
nativeRandom = Math.random;
/** Used as references for `-Infinity` and `Infinity`. */
var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY,
POSITIVE_INFINITY = Number.POSITIVE_INFINITY;
/** Used as references for the maximum length and index of an array. */
var MAX_ARRAY_LENGTH = 4294967295,
MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
|
|
Used as the maximum length of an array-like value. |
var MAX_SAFE_INTEGER = 9007199254740991;
/** Used to store function metadata. */
var metaMap = WeakMap && new WeakMap;
/** Used to lookup unminified function names. */
var realNames = {};
/*------------------------------------------------------------------------*/
|
|
Creates a Lazy evaluation allows several methods to support shortcut fusion. Shortcut fusion is an optimization strategy which merge iteratee calls; this can help to avoid the creation of intermediate data structures and greatly reduce the number of iteratee executions. Chaining is supported in custom builds as long as the In addition to lodash methods, wrappers have The wrapper The wrapper The wrapper methods that support shortcut fusion are:
The chainable wrapper methods are:
The wrapper methods that are not chainable by default are:
The wrapper method name
constructor
category
Chain
Params
value
The value to wrap in a
lodash instance.
Returns
Object
Returns the new
lodash wrapper instance.
example
var
wrapped = _([1, 2, 3]);
// returns an unwrapped value
wrapped.reduce(function(total, n) {
return total + n;
});
// => 6
// returns a wrapped value
var squares = wrapped.map(function(n) {
return n n;
});
.isArray(squares);
// => false
.isArray(squares.value());
// => true
|
function lodash(value) {
if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
if (value instanceof LodashWrapper) {
return value;
}
if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) {
return wrapperClone(value);
}
}
return new LodashWrapper(value);
}
|
|
The function whose prototype all chaining wrappers inherit from. private
|
function baseLodash() {
|
|
No operation performed. |
}
|
|
The base constructor for creating API
private
Params
value
*
The value to wrap.
[chainAll]
boolean
Enable chaining for all wrapper methods.
[actions=[]]
Array
Actions to peform to resolve the unwrapped value.
|
function LodashWrapper(value, chainAll, actions) {
this.__wrapped__ = value;
this.__actions__ = actions || [];
this.__chain__ = !!chainAll;
}
|
|
An object environment feature flags. static
memberOf
_
Type
Object
|
var support = lodash.support = {};
|
|
By default, the template delimiters used by lodash are like those in embedded Ruby (ERB). Change the following template settings to use alternative delimiters. static
memberOf
_
Type
Object
|
lodash.templateSettings = {
|
|
Used to detect memberOf
_.templateSettings
Type
RegExp
|
'escape': reEscape,
|
|
Used to detect code to be evaluated. memberOf
_.templateSettings
Type
RegExp
|
'evaluate': reEvaluate,
|
|
Used to detect memberOf
_.templateSettings
Type
RegExp
|
'interpolate': reInterpolate,
|
|
Used to reference the data object in the template text. memberOf
_.templateSettings
Type
string
|
'variable': '',
|
|
Used to import variables into the compiled template. memberOf
_.templateSettings
Type
Object
|
'imports': {
|
|
A reference to the memberOf
_.templateSettings.imports
Type
Function
|
'_': lodash
}
};
/*------------------------------------------------------------------------*/
|
|
Creates a lazy wrapper object which wraps API
private
Params
value
*
The value to wrap.
|
function LazyWrapper(value) {
this.__wrapped__ = value;
this.__actions__ = [];
this.__dir__ = 1;
this.__filtered__ = false;
this.__iteratees__ = [];
this.__takeCount__ = POSITIVE_INFINITY;
this.__views__ = [];
}
|
|
Creates a clone of the lazy wrapper object. API
private
name
clone
memberOf
LazyWrapper
Returns
Object
Returns the cloned
LazyWrapper object.
|
function lazyClone() {
var result = new LazyWrapper(this.__wrapped__);
result.__actions__ = arrayCopy(this.__actions__);
result.__dir__ = this.__dir__;
result.__filtered__ = this.__filtered__;
result.__iteratees__ = arrayCopy(this.__iteratees__);
result.__takeCount__ = this.__takeCount__;
result.__views__ = arrayCopy(this.__views__);
return result;
}
|
|
Reverses the direction of lazy iteration. API
private
name
reverse
memberOf
LazyWrapper
Returns
Object
Returns the new reversed
LazyWrapper object.
|
function lazyReverse() {
if (this.__filtered__) {
var result = new LazyWrapper(this);
result.__dir__ = -1;
result.__filtered__ = true;
} else {
result = this.clone();
result.__dir__ *= -1;
}
return result;
}
|
|
Extracts the unwrapped value from its lazy wrapper. API
private
name
value
memberOf
LazyWrapper
Returns
*
Returns the unwrapped value.
|
function lazyValue() {
var array = this.__wrapped__.value(),
dir = this.__dir__,
isArr = isArray(array),
isRight = dir < 0,
arrLength = isArr ? array.length : 0,
view = getView(0, arrLength, this.__views__),
start = view.start,
end = view.end,
length = end - start,
index = isRight ? end : (start - 1),
iteratees = this.__iteratees__,
iterLength = iteratees.length,
resIndex = 0,
takeCount = nativeMin(length, this.__takeCount__);
if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) {
return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__);
}
var result = [];
outer:
while (length-- && resIndex < takeCount) {
index += dir;
var iterIndex = -1,
value = array[index];
while (++iterIndex < iterLength) {
var data = iteratees[iterIndex],
iteratee = data.iteratee,
type = data.type,
computed = iteratee(value);
if (type == LAZY_MAP_FLAG) {
value = computed;
} else if (!computed) {
if (type == LAZY_FILTER_FLAG) {
continue outer;
} else {
break outer;
}
}
}
result[resIndex++] = value;
}
return result;
}
/*------------------------------------------------------------------------*/
|
|
Creates a cache object to store key/value pairs. API
private
static
name
Cache
memberOf
_.memoize
|
function MapCache() {
this.__data__ = {};
}
|
|
Removes API
private
name
delete
memberOf
_.memoize.Cache
Params
key
string
The key of the value to remove.
Returns
boolean
Returns
true if the entry was removed successfully, else false.
|
function mapDelete(key) {
return this.has(key) && delete this.__data__[key];
}
|
|
Gets the cached value for API
private
name
get
memberOf
_.memoize.Cache
Params
key
string
The key of the value to get.
Returns
*
Returns the cached value.
|
function mapGet(key) {
return key == '__proto__' ? undefined : this.__data__[key];
}
|
|
Checks if a cached value for API
private
name
has
memberOf
_.memoize.Cache
Params
key
string
The key of the entry to check.
Returns
boolean
Returns
true if an entry for key exists, else false.
|
function mapHas(key) {
return key != '__proto__' && hasOwnProperty.call(this.__data__, key);
}
|
|
Sets API
private
name
set
memberOf
_.memoize.Cache
Params
key
string
The key of the value to cache.
value
*
The value to cache.
Returns
Object
Returns the cache object.
|
function mapSet(key, value) {
if (key != '__proto__') {
this.__data__[key] = value;
}
return this;
}
/*------------------------------------------------------------------------*/
|
|
Creates a cache object to store unique values. API
private
Params
[values]
Array
The values to cache.
|
function SetCache(values) {
var length = values ? values.length : 0;
this.data = { 'hash': nativeCreate(null), 'set': new Set };
while (length--) {
this.push(values[length]);
}
}
|
|
Checks if API
private
Params
cache
Object
The cache to search.
value
*
The value to search for.
Returns
number
Returns
0 if value is found, else -1.
|
function cacheIndexOf(cache, value) {
var data = cache.data,
result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value];
return result ? 0 : -1;
}
|
|
Adds API
private
name
push
memberOf
SetCache
Params
value
*
The value to cache.
|
function cachePush(value) {
var data = this.data;
if (typeof value == 'string' || isObject(value)) {
data.set.add(value);
} else {
data.hash[value] = true;
}
}
/*------------------------------------------------------------------------*/
|
|
Creates a new array joining API
private
Params
array
Array
The array to join.
other
Array
The other array to join.
Returns
Array
Returns the new concatenated array.
|
function arrayConcat(array, other) {
var index = -1,
length = array.length,
othIndex = -1,
othLength = other.length,
result = Array(length + othLength);
while (++index < length) {
result[index] = array[index];
}
while (++othIndex < othLength) {
result[index++] = other[othIndex];
}
return result;
}
|
|
Copies the values of API
private
Params
source
Array
The array to copy values from.
[array=[]]
Array
The array to copy values to.
Returns
Array
Returns
array.
|
function arrayCopy(source, array) {
var index = -1,
length = source.length;
array || (array = Array(length));
while (++index < length) {
array[index] = source[index];
}
return array;
}
|
|
A specialized version of API
private
Params
array
Array
The array to iterate over.
iteratee
Function
The function invoked per iteration.
Returns
Array
Returns
array.
|
function arrayEach(array, iteratee) {
var index = -1,
length = array.length;
while (++index < length) {
if (iteratee(array[index], index, array) === false) {
break;
}
}
return array;
}
|
|
A specialized version of API
private
Params
array
Array
The array to iterate over.
iteratee
Function
The function invoked per iteration.
Returns
Array
Returns
array.
|
function arrayEachRight(array, iteratee) {
var length = array.length;
while (length--) {
if (iteratee(array[length], length, array) === false) {
break;
}
}
return array;
}
|
|
A specialized version of API
private
Params
array
Array
The array to iterate over.
predicate
Function
The function invoked per iteration.
Returns
boolean
Returns
true if all elements pass the predicate check,
else false.
|
function arrayEvery(array, predicate) {
var index = -1,
length = array.length;
while (++index < length) {
if (!predicate(array[index], index, array)) {
return false;
}
}
return true;
}
|
|
A specialized version of API
private
Params
array
Array
The array to iterate over.
iteratee
Function
The function invoked per iteration.
comparator
Function
The function used to compare values.
exValue
The initial extremum value.
Returns
Returns the extremum value.
|
function arrayExtremum(array, iteratee, comparator, exValue) {
var index = -1,
length = array.length,
computed = exValue,
result = computed;
while (++index < length) {
var value = array[index],
current = +iteratee(value);
if (comparator(current, computed)) {
computed = current;
result = value;
}
}
return result;
}
|
|
A specialized version of API
private
Params
array
Array
The array to iterate over.
predicate
Function
The function invoked per iteration.
Returns
Array
Returns the new filtered array.
|
function arrayFilter(array, predicate) {
var index = -1,
length = array.length,
resIndex = -1,
result = [];
while (++index < length) {
var value = array[index];
if (predicate(value, index, array)) {
result[++resIndex] = value;
}
}
return result;
}
|
|
A specialized version of API
private
Params
array
Array
The array to iterate over.
iteratee
Function
The function invoked per iteration.
Returns
Array
Returns the new mapped array.
|
function arrayMap(array, iteratee) {
var index = -1,
length = array.length,
result = Array(length);
while (++index < length) {
result[index] = iteratee(array[index], index, array);
}
return result;
}
|
|
Appends the elements of API
private
Params
array
Array
The array to modify.
values
Array
The values to append.
Returns
Array
Returns
array.
|
function arrayPush(array, values) {
var index = -1,
length = values.length,
offset = array.length;
while (++index < length) {
array[offset + index] = values[index];
}
return array;
}
|
|
A specialized version of API
private
Params
array
Array
The array to iterate over.
iteratee
Function
The function invoked per iteration.
[accumulator]
The initial value.
[initFromArray]
boolean
Specify using the first element of
array
as the initial value.
Returns
Returns the accumulated value.
|
function arrayReduce(array, iteratee, accumulator, initFromArray) {
var index = -1,
length = array.length;
if (initFromArray && length) {
accumulator = array[++index];
}
while (++index < length) {
accumulator = iteratee(accumulator, array[index], index, array);
}
return accumulator;
}
|
|
A specialized version of API
private
Params
array
Array
The array to iterate over.
iteratee
Function
The function invoked per iteration.
[accumulator]
The initial value.
[initFromArray]
boolean
Specify using the last element of
array
as the initial value.
Returns
Returns the accumulated value.
|
function arrayReduceRight(array, iteratee, accumulator, initFromArray) {
var length = array.length;
if (initFromArray && length) {
accumulator = array[--length];
}
while (length--) {
accumulator = iteratee(accumulator, array[length], length, array);
}
return accumulator;
}
|
|
A specialized version of API
private
Params
array
Array
The array to iterate over.
predicate
Function
The function invoked per iteration.
Returns
boolean
Returns
true if any element passes the predicate check,
else false.
|
function arraySome(array, predicate) {
var index = -1,
length = array.length;
while (++index < length) {
if (predicate(array[index], index, array)) {
return true;
}
}
return false;
}
|
|
A specialized version of API
private
Params
array
Array
The array to iterate over.
iteratee
Function
The function invoked per iteration.
Returns
number
Returns the sum.
|
function arraySum(array, iteratee) {
var length = array.length,
result = 0;
while (length--) {
result += +iteratee(array[length]) || 0;
}
return result;
}
|
|
Used by API
private
Params
objectValue
The destination object property value.
sourceValue
The source object property value.
Returns
*
Returns the value to assign to the destination object.
|
function assignDefaults(objectValue, sourceValue) {
return objectValue === undefined ? sourceValue : objectValue;
}
|
|
Used by Note: This function is like API
private
Params
objectValue
The destination object property value.
sourceValue
The source object property value.
key
string
The key associated with the object and source values.
object
Object
The destination object.
Returns
*
Returns the value to assign to the destination object.
|
function assignOwnDefaults(objectValue, sourceValue, key, object) {
return (objectValue === undefined || !hasOwnProperty.call(object, key))
? sourceValue
: objectValue;
}
|
|
A specialized version of API
private
Params
object
Object
The destination object.
source
Object
The source object.
customizer
Function
The function to customize assigned values.
Returns
Object
Returns
object.
|
function assignWith(object, source, customizer) {
var index = -1,
props = keys(source),
length = props.length;
while (++index < length) {
var key = props[index],
value = object[key],
result = customizer(value, source[key], key, object, source);
if ((result === result ? (result !== value) : (value === value)) ||
(value === undefined && !(key in object))) {
object[key] = result;
}
}
return object;
}
|
|
The base implementation of API
private
Params
object
Object
The destination object.
source
Object
The source object.
Returns
Object
Returns
object.
|
function baseAssign(object, source) {
return source == null
? object
: baseCopy(source, keys(source), object);
}
|
|
The base implementation of API
private
Params
collection
Array
Object
The collection to iterate over.
props
number[]
string[]
The property names or indexes of elements to pick.
Returns
Array
Returns the new array of picked elements.
|
function baseAt(collection, props) {
var index = -1,
isNil = collection == null,
isArr = !isNil && isArrayLike(collection),
length = isArr ? collection.length : 0,
propsLength = props.length,
result = Array(propsLength);
while(++index < propsLength) {
var key = props[index];
if (isArr) {
result[index] = isIndex(key, length) ? collection[key] : undefined;
} else {
result[index] = isNil ? undefined : collection[key];
}
}
return result;
}
|
|
Copies properties of API
private
Params
source
Object
The object to copy properties from.
props
Array
The property names to copy.
[object={}]
Object
The object to copy properties to.
Returns
Object
Returns
object.
|
function baseCopy(source, props, object) {
object || (object = {});
var index = -1,
length = props.length;
while (++index < length) {
var key = props[index];
object[key] = source[key];
}
return object;
}
|
|
The base implementation of API
private
Params
[func=.identity]
The value to convert to a callback.
[thisArg]
The
this binding of func.
[argCount]
number
The number of arguments to provide to
func.
Returns
Function
Returns the callback.
|
function baseCallback(func, thisArg, argCount) {
var type = typeof func;
if (type == 'function') {
return thisArg === undefined
? func
: bindCallback(func, thisArg, argCount);
}
if (func == null) {
return identity;
}
if (type == 'object') {
return baseMatches(func);
}
return thisArg === undefined
? property(func)
: baseMatchesProperty(func, thisArg);
}
|
|
The base implementation of API
private
Params
value
The value to clone.
[isDeep]
boolean
Specify a deep clone.
[customizer]
Function
The function to customize cloning values.
[key]
string
The key of
value.
[object]
Object
The object
value belongs to.
[stackA=[]]
Array
Tracks traversed source objects.
[stackB=[]]
Array
Associates clones with source counterparts.
Returns
Returns the cloned value.
|
function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {
var result;
if (customizer) {
result = object ? customizer(value, key, object) : customizer(value);
}
if (result !== undefined) {
return result;
}
if (!isObject(value)) {
return value;
}
var isArr = isArray(value);
if (isArr) {
result = initCloneArray(value);
if (!isDeep) {
return arrayCopy(value, result);
}
} else {
var tag = objToString.call(value),
isFunc = tag == funcTag;
if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
result = initCloneObject(isFunc ? {} : value);
if (!isDeep) {
return baseAssign(result, value);
}
} else {
return cloneableTags[tag]
? initCloneByTag(value, tag, isDeep)
: (object ? value : {});
}
}
|
|
Check for circular references and return its corresponding clone. |
stackA || (stackA = []);
stackB || (stackB = []);
var length = stackA.length;
while (length--) {
if (stackA[length] == value) {
return stackB[length];
}
}
|
|
Add the source value to the stack of traversed objects and associate it with its clone. |
stackA.push(value);
stackB.push(result);
|
|
Recursively populate clone (susceptible to call stack limits). |
(isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {
result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);
});
return result;
}
|
|
The base implementation of API
private
Params
prototype
Object
The object to inherit from.
Returns
Object
Returns the new object.
|
var baseCreate = (function() {
function object() {}
return function(prototype) {
if (isObject(prototype)) {
object.prototype = prototype;
var result = new object;
object.prototype = undefined;
}
return result || {};
};
}());
|
|
The base implementation of API
private
Params
func
Function
The function to delay.
wait
number
The number of milliseconds to delay invocation.
args
Object
The arguments provide to
func.
Returns
number
Returns the timer id.
|
function baseDelay(func, wait, args) {
if (typeof func != 'function') {
throw new TypeError(FUNC_ERROR_TEXT);
}
return setTimeout(function() { func.apply(undefined, args); }, wait);
}
|
|
The base implementation of API
private
Params
array
Array
The array to inspect.
values
Array
The values to exclude.
Returns
Array
Returns the new array of filtered values.
|
function baseDifference(array, values) {
var length = array ? array.length : 0,
result = [];
if (!length) {
return result;
}
var index = -1,
indexOf = getIndexOf(),
isCommon = indexOf == baseIndexOf,
cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null,
valuesLength = values.length;
if (cache) {
indexOf = cacheIndexOf;
isCommon = false;
values = cache;
}
outer:
while (++index < length) {
var value = array[index];
if (isCommon && value === value) {
var valuesIndex = valuesLength;
while (valuesIndex--) {
if (values[valuesIndex] === value) {
continue outer;
}
}
result.push(value);
}
else if (indexOf(values, value, 0) < 0) {
result.push(value);
}
}
return result;
}
|
|
The base implementation of API
private
Params
collection
Array
Object
string
The collection to iterate over.
iteratee
Function
The function invoked per iteration.
Returns
Array
Object
string
Returns
collection.
|
var baseEach = createBaseEach(baseForOwn);
|
|
The base implementation of API
private
Params
collection
Array
Object
string
The collection to iterate over.
iteratee
Function
The function invoked per iteration.
Returns
Array
Object
string
Returns
collection.
|
var baseEachRight = createBaseEach(baseForOwnRight, true);
|
|
The base implementation of API
private
Params
collection
Array
Object
string
The collection to iterate over.
predicate
Function
The function invoked per iteration.
Returns
boolean
Returns
true if all elements pass the predicate check,
else false
|
function baseEvery(collection, predicate) {
var result = true;
baseEach(collection, function(value, index, collection) {
result = !!predicate(value, index, collection);
return result;
});
return result;
}
|
|
Gets the extremum value of API
private
Params
collection
Array
Object
string
The collection to iterate over.
iteratee
Function
The function invoked per iteration.
comparator
Function
The function used to compare values.
exValue
The initial extremum value.
Returns
Returns the extremum value.
|
function baseExtremum(collection, iteratee, comparator, exValue) {
var computed = exValue,
result = computed;
baseEach(collection, function(value, index, collection) {
var current = +iteratee(value, index, collection);
if (comparator(current, computed) || (current === exValue && current === result)) {
computed = current;
result = value;
}
});
return result;
}
|
|
The base implementation of API
private
Params
array
Array
The array to fill.
value
*
The value to fill
array with.
[start=0]
number
The start position.
[end=array.length]
number
The end position.
Returns
Array
Returns
array.
|
function baseFill(array, value, start, end) {
var length = array.length;
start = start == null ? 0 : (+start || 0);
if (start < 0) {
start = -start > length ? 0 : (length + start);
}
end = (end === undefined || end > length) ? length : (+end || 0);
if (end < 0) {
end += length;
}
length = start > end ? 0 : (end >>> 0);
start >>>= 0;
while (start < length) {
array[start++] = value;
}
return array;
}
|
|
The base implementation of API
private
Params
collection
Array
Object
string
The collection to iterate over.
predicate
Function
The function invoked per iteration.
Returns
Array
Returns the new filtered array.
|
function baseFilter(collection, predicate) {
var result = [];
baseEach(collection, function(value, index, collection) {
if (predicate(value, index, collection)) {
result.push(value);
}
});
return result;
}
|
|
The base implementation of API
private
Params
collection
Array
Object
string
The collection to search.
predicate
Function
The function invoked per iteration.
eachFunc
Function
The function to iterate over
collection.
[retKey]
boolean
Specify returning the key of the found element
instead of the element itself.
Returns
*
Returns the found element or its key, else
undefined.
|
function baseFind(collection, predicate, eachFunc, retKey) {
var result;
eachFunc(collection, function(value, key, collection) {
if (predicate(value, key, collection)) {
result = retKey ? key : value;
return false;
}
});
return result;
}
|
|
The base implementation of API
private
Params
array
Array
The array to flatten.
[isDeep]
boolean
Specify a deep flatten.
[isStrict]
boolean
Restrict flattening to arrays-like objects.
[result=[]]
Array
The initial result value.
Returns
Array
Returns the new flattened array.
|
function baseFlatten(array, isDeep, isStrict, result) {
result || (result = []);
var index = -1,
length = array.length;
while (++index < length) {
var value = array[index];
if (isObjectLike(value) && isArrayLike(value) &&
(isStrict || isArray(value) || isArguments(value))) {
if (isDeep) {
|
|
Recursively flatten arrays (susceptible to call stack limits). |
baseFlatten(value, isDeep, isStrict, result);
} else {
arrayPush(result, value);
}
} else if (!isStrict) {
result[result.length] = value;
}
}
return result;
}
|
|
The base implementation of API
private
Params
object
Object
The object to iterate over.
iteratee
Function
The function invoked per iteration.
keysFunc
Function
The function to get the keys of
object.
Returns
Object
Returns
object.
|
var baseFor = createBaseFor();
|
|
This function is like API
private
Params
object
Object
The object to iterate over.
iteratee
Function
The function invoked per iteration.
keysFunc
Function
The function to get the keys of
object.
Returns
Object
Returns
object.
|
var baseForRight = createBaseFor(true);
|
|
The base implementation of API
private
Params
object
Object
The object to iterate over.
iteratee
Function
The function invoked per iteration.
Returns
Object
Returns
object.
|
function baseForIn(object, iteratee) {
return baseFor(object, iteratee, keysIn);
}
|
|
The base implementation of API
private
Params
object
Object
The object to iterate over.
iteratee
Function
The function invoked per iteration.
Returns
Object
Returns
object.
|
function baseForOwn(object, iteratee) {
return baseFor(object, iteratee, keys);
}
|
|
The base implementation of API
private
Params
object
Object
The object to iterate over.
iteratee
Function
The function invoked per iteration.
Returns
Object
Returns
object.
|
function baseForOwnRight(object, iteratee) {
return baseForRight(object, iteratee, keys);
}
|
|
The base implementation of API
private
Params
object
Object
The object to inspect.
props
Array
The property names to filter.
Returns
Array
Returns the new array of filtered property names.
|
function baseFunctions(object, props) {
var index = -1,
length = props.length,
resIndex = -1,
result = [];
while (++index < length) {
var key = props[index];
if (isFunction(object[key])) {
result[++resIndex] = key;
}
}
return result;
}
|
|
The base implementation of API
private
Params
object
Object
The object to query.
path
Array
The path of the property to get.
[pathKey]
string
The key representation of path.
Returns
*
Returns the resolved value.
|
function baseGet(object, path, pathKey) {
if (object == null) {
return;
}
if (pathKey !== undefined && pathKey in toObject(object)) {
path = [pathKey];
}
var index = 0,
length = path.length;
while (object != null && index < length) {
object = object[path[index++]];
}
return (index && index == length) ? object : undefined;
}
|
|
The base implementation of API
private
Params
value
The value to compare.
other
The other value to compare.
[customizer]
Function
The function to customize comparing values.
[isLoose]
boolean
Specify performing partial comparisons.
[stackA]
Array
Tracks traversed
value objects.
[stackB]
Array
Tracks traversed
other objects.
Returns
boolean
Returns
true if the values are equivalent, else false.
|
function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {
if (value === other) {
return true;
}
if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
return value !== value && other !== other;
}
return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);
}
|
|
A specialized version of API
private
Params
object
Object
The object to compare.
other
Object
The other object to compare.
equalFunc
Function
The function to determine equivalents of values.
[customizer]
Function
The function to customize comparing objects.
[isLoose]
boolean
Specify performing partial comparisons.
[stackA=[]]
Array
Tracks traversed
value objects.
[stackB=[]]
Array
Tracks traversed
other objects.
Returns
boolean
Returns
true if the objects are equivalent, else false.
|
function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
var objIsArr = isArray(object),
othIsArr = isArray(other),
objTag = arrayTag,
othTag = arrayTag;
if (!objIsArr) {
objTag = objToString.call(object);
if (objTag == argsTag) {
objTag = objectTag;
} else if (objTag != objectTag) {
objIsArr = isTypedArray(object);
}
}
if (!othIsArr) {
othTag = objToString.call(other);
if (othTag == argsTag) {
othTag = objectTag;
} else if (othTag != objectTag) {
othIsArr = isTypedArray(other);
}
}
var objIsObj = objTag == objectTag,
othIsObj = othTag == objectTag,
isSameTag = objTag == othTag;
if (isSameTag && !(objIsArr || objIsObj)) {
return equalByTag(object, other, objTag);
}
if (!isLoose) {
var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
if (objIsWrapped || othIsWrapped) {
return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);
}
}
if (!isSameTag) {
return false;
}
|
|
Assume cyclic values are equal. For more information on detecting circular references see https://es5.github.io/#JO. |
stackA || (stackA = []);
stackB || (stackB = []);
var length = stackA.length;
while (length--) {
if (stackA[length] == object) {
return stackB[length] == other;
}
}
|
|
Add |
stackA.push(object);
stackB.push(other);
var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);
stackA.pop();
stackB.pop();
return result;
}
|
|
The base implementation of API
private
Params
object
Object
The object to inspect.
matchData
Array
The propery names, values, and compare flags to match.
[customizer]
Function
The function to customize comparing objects.
Returns
boolean
Returns
true if object is a match, else false.
|
function baseIsMatch(object, matchData, customizer) {
var index = matchData.length,
length = index,
noCustomizer = !customizer;
if (object == null) {
return !length;
}
object = toObject(object);
while (index--) {
var data = matchData[index];
if ((noCustomizer && data[2])
? data[1] !== object[data[0]]
: !(data[0] in object)
) {
return false;
}
}
while (++index < length) {
data = matchData[index];
var key = data[0],
objValue = object[key],
srcValue = data[1];
if (noCustomizer && data[2]) {
if (objValue === undefined && !(key in object)) {
return false;
}
} else {
var result = customizer ? customizer(objValue, srcValue, key) : undefined;
if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {
return false;
}
}
}
return true;
}
|
|
The base implementation of API
private
Params
collection
Array
Object
string
The collection to iterate over.
iteratee
Function
The function invoked per iteration.
Returns
Array
Returns the new mapped array.
|
function baseMap(collection, iteratee) {
var index = -1,
result = isArrayLike(collection) ? Array(collection.length) : [];
baseEach(collection, function(value, key, collection) {
result[++index] = iteratee(value, key, collection);
});
return result;
}
|
|
The base implementation of API
private
Params
source
Object
The object of property values to match.
Returns
Function
Returns the new function.
|
function baseMatches(source) {
var matchData = getMatchData(source);
if (matchData.length == 1 && matchData[0][2]) {
var key = matchData[0][0],
value = matchData[0][1];
return function(object) {
if (object == null) {
return false;
}
return object[key] === value && (value !== undefined || (key in toObject(object)));
};
}
return function(object) {
return baseIsMatch(object, matchData);
};
}
|
|
The base implementation of API
private
Params
path
string
The path of the property to get.
srcValue
*
The value to compare.
Returns
Function
Returns the new function.
|
function baseMatchesProperty(path, srcValue) {
var isArr = isArray(path),
isCommon = isKey(path) && isStrictComparable(srcValue),
pathKey = (path + '');
path = toPath(path);
return function(object) {
if (object == null) {
return false;
}
var key = pathKey;
object = toObject(object);
if ((isArr || !isCommon) && !(key in object)) {
object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
if (object == null) {
return false;
}
key = last(path);
object = toObject(object);
}
return object[key] === srcValue
? (srcValue !== undefined || (key in object))
: baseIsEqual(srcValue, object[key], undefined, true);
};
}
|
|
The base implementation of API
private
Params
object
Object
The destination object.
source
Object
The source object.
[customizer]
Function
The function to customize merged values.
[stackA=[]]
Array
Tracks traversed source objects.
[stackB=[]]
Array
Associates values with source counterparts.
Returns
Object
Returns
object.
|
function baseMerge(object, source, customizer, stackA, stackB) {
if (!isObject(object)) {
return object;
}
var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),
props = isSrcArr ? undefined : keys(source);
arrayEach(props || source, function(srcValue, key) {
if (props) {
key = srcValue;
srcValue = source[key];
}
if (isObjectLike(srcValue)) {
stackA || (stackA = []);
stackB || (stackB = []);
baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);
}
else {
var value = object[key],
result = customizer ? customizer(value, srcValue, key, object, source) : undefined,
isCommon = result === undefined;
if (isCommon) {
result = srcValue;
}
if ((result !== undefined || (isSrcArr && !(key in object))) &&
(isCommon || (result === result ? (result !== value) : (value === value)))) {
object[key] = result;
}
}
});
return object;
}
|
|
A specialized version of API
private
Params
object
Object
The destination object.
source
Object
The source object.
key
string
The key of the value to merge.
mergeFunc
Function
The function to merge values.
[customizer]
Function
The function to customize merged values.
[stackA=[]]
Array
Tracks traversed source objects.
[stackB=[]]
Array
Associates values with source counterparts.
Returns
boolean
Returns
true if the objects are equivalent, else false.
|
function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {
var length = stackA.length,
srcValue = source[key];
while (length--) {
if (stackA[length] == srcValue) {
object[key] = stackB[length];
return;
}
}
var value = object[key],
result = customizer ? customizer(value, srcValue, key, object, source) : undefined,
isCommon = result === undefined;
if (isCommon) {
result = srcValue;
if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {
result = isArray(value)
? value
: (isArrayLike(value) ? arrayCopy(value) : []);
}
else if (isPlainObject(srcValue) || isArguments(srcValue)) {
result = isArguments(value)
? toPlainObject(value)
: (isPlainObject(value) ? value : {});
}
else {
isCommon = false;
}
}
|
|
Add the source value to the stack of traversed objects and associate it with its merged value. |
stackA.push(srcValue);
stackB.push(result);
if (isCommon) {
|
|
Recursively merge objects and arrays (susceptible to call stack limits). |
object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);
} else if (result === result ? (result !== value) : (value === value)) {
object[key] = result;
}
}
|
|
The base implementation of API
private
Params
key
string
The key of the property to get.
Returns
Function
Returns the new function.
|
function baseProperty(key) {
return function(object) {
return object == null ? undefined : object[key];
};
}
|
|
A specialized version of API
private
Params
path
Array
string
The path of the property to get.
Returns
Function
Returns the new function.
|
function basePropertyDeep(path) {
var pathKey = (path + '');
path = toPath(path);
return function(object) {
return baseGet(object, path, pathKey);
};
}
|
|
The base implementation of API
private
Params
array
Array
The array to modify.
indexes
number[]
The indexes of elements to remove.
Returns
Array
Returns
array.
|
function basePullAt(array, indexes) {
var length = array ? indexes.length : 0;
while (length--) {
var index = indexes[length];
if (index != previous && isIndex(index)) {
var previous = index;
splice.call(array, index, 1);
}
}
return array;
}
|
|
The base implementation of API
private
Params
min
number
The minimum possible value.
max
number
The maximum possible value.
Returns
number
Returns the random number.
|
function baseRandom(min, max) {
return min + nativeFloor(nativeRandom() * (max - min + 1));
}
|
|
The base implementation of API
private
Params
collection
Array
Object
string
The collection to iterate over.
iteratee
Function
The function invoked per iteration.
accumulator
The initial value.
initFromCollection
boolean
Specify using the first or last element
of
collection as the initial value.
eachFunc
Function
The function to iterate over
collection.
Returns
Returns the accumulated value.
|
function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) {
eachFunc(collection, function(value, index, collection) {
accumulator = initFromCollection
? (initFromCollection = false, value)
: iteratee(accumulator, value, index, collection);
});
return accumulator;
}
|
|
The base implementation of API
private
Params
func
Function
The function to associate metadata with.
data
*
The metadata.
Returns
Function
Returns
func.
|
var baseSetData = !metaMap ? identity : function(func, data) {
metaMap.set(func, data);
return func;
};
|
|
The base implementation of API
private
Params
array
Array
The array to slice.
[start=0]
number
The start position.
[end=array.length]
number
The end position.
Returns
Array
Returns the slice of
array.
|
function baseSlice(array, start, end) {
var index = -1,
length = array.length;
start = start == null ? 0 : (+start || 0);
if (start < 0) {
start = -start > length ? 0 : (length + start);
}
end = (end === undefined || end > length) ? length : (+end || 0);
if (end < 0) {
end += length;
}
length = start > end ? 0 : ((end - start) >>> 0);
start >>>= 0;
var result = Array(length);
while (++index < length) {
result[index] = array[index + start];
}
return result;
}
|
|
The base implementation of API
private
Params
collection
Array
Object
string
The collection to iterate over.
predicate
Function
The function invoked per iteration.
Returns
boolean
Returns
true if any element passes the predicate check,
else false.
|
function baseSome(collection, predicate) {
var result;
baseEach(collection, function(value, index, collection) {
result = predicate(value, index, collection);
return !result;
});
return !!result;
}
|
|
The base implementation of API
private
Params
array
Array
The array to sort.
comparer
Function
The function to define sort order.
Returns
Array
Returns
array.
|
function baseSortBy(array, comparer) {
var length = array.length;
array.sort(comparer);
while (length--) {
array[length] = array[length].value;
}
return array;
}
|
|
The base implementation of API
private
Params
collection
Array
Object
string
The collection to iterate over.
iteratees
Function[]
Object[]
string[]
The iteratees to sort by.
orders
boolean[]
The sort orders of
iteratees.
Returns
Array
Returns the new sorted array.
|
function baseSortByOrder(collection, iteratees, orders) {
var callback = getCallback(),
index = -1;
iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); });
var result = baseMap(collection, function(value) {
var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); });
return { 'criteria': criteria, 'index': ++index, 'value': value };
});
return baseSortBy(result, function(object, other) {
return compareMultiple(object, other, orders);
});
}
|
|
The base implementation of API
private
Params
collection
Array
Object
string
The collection to iterate over.
iteratee
Function
The function invoked per iteration.
Returns
number
Returns the sum.
|
function baseSum(collection, iteratee) {
var result = 0;
baseEach(collection, function(value, index, collection) {
result += +iteratee(value, index, collection) || 0;
});
return result;
}
|
|
The base implementation of API
private
Params
array
Array
The array to inspect.
[iteratee]
Function
The function invoked per iteration.
Returns
Array
Returns the new duplicate-value-free array.
|
function baseUniq(array, iteratee) {
var index = -1,
indexOf = getIndexOf(),
length = array.length,
isCommon = indexOf == baseIndexOf,
isLarge = isCommon && length >= LARGE_ARRAY_SIZE,
seen = isLarge ? createCache() : null,
result = [];
if (seen) {
indexOf = cacheIndexOf;
isCommon = false;
} else {
isLarge = false;
seen = iteratee ? [] : result;
}
outer:
while (++index < length) {
var value = array[index],
computed = iteratee ? iteratee(value, index, array) : value;
if (isCommon && value === value) {
var seenIndex = seen.length;
while (seenIndex--) {
if (seen[seenIndex] === computed) {
continue outer;
}
}
if (iteratee) {
seen.push(computed);
}
result.push(value);
}
else if (indexOf(seen, computed, 0) < 0) {
if (iteratee || isLarge) {
seen.push(computed);
}
result.push(value);
}
}
return result;
}
|
|
The base implementation of API
private
Params
object
Object
The object to query.
props
Array
The property names to get values for.
Returns
Object
Returns the array of property values.
|
function baseValues(object, props) {
var index = -1,
length = props.length,
result = Array(length);
while (++index < length) {
result[index] = object[props[index]];
}
return result;
}
|
|
The base implementation of API
private
Params
array
Array
The array to query.
predicate
Function
The function invoked per iteration.
[isDrop]
boolean
Specify dropping elements instead of taking them.
[fromRight]
boolean
Specify iterating from right to left.
Returns
Array
Returns the slice of
array.
|
function baseWhile(array, predicate, isDrop, fromRight) {
var length = array.length,
index = fromRight ? length : -1;
while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}
return isDrop
? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
: baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
}
|
|
The base implementation of API
private
Params
value
The unwrapped value.
actions
Array
Actions to peform to resolve the unwrapped value.
Returns
Returns the resolved value.
|
function baseWrapperValue(value, actions) {
var result = value;
if (result instanceof LazyWrapper) {
result = result.value();
}
var index = -1,
length = actions.length;
while (++index < length) {
var action = actions[index];
result = action.func.apply(action.thisArg, arrayPush([result], action.args));
}
return result;
}
|
|
Performs a binary search of API
private
Params
array
Array
The sorted array to inspect.
value
*
The value to evaluate.
[retHighest]
boolean
Specify returning the highest qualified index.
Returns
number
Returns the index at which
value should be inserted
into array.
|
function binaryIndex(array, value, retHighest) {
var low = 0,
high = array ? array.length : low;
if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
while (low < high) {
var mid = (low + high) >>> 1,
computed = array[mid];
if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) {
low = mid + 1;
} else {
high = mid;
}
}
return high;
}
return binaryIndexBy(array, value, identity, retHighest);
}
|
|
This function is like API
private
Params
array
Array
The sorted array to inspect.
value
*
The value to evaluate.
iteratee
Function
The function invoked per iteration.
[retHighest]
boolean
Specify returning the highest qualified index.
Returns
number
Returns the index at which
value should be inserted
into array.
|
function binaryIndexBy(array, value, iteratee, retHighest) {
value = iteratee(value);
var low = 0,
high = array ? array.length : 0,
valIsNaN = value !== value,
valIsNull = value === null,
valIsUndef = value === undefined;
while (low < high) {
var mid = nativeFloor((low + high) / 2),
computed = iteratee(array[mid]),
isDef = computed !== undefined,
isReflexive = computed === computed;
if (valIsNaN) {
var setLow = isReflexive || retHighest;
} else if (valIsNull) {
setLow = isReflexive && isDef && (retHighest || computed != null);
} else if (valIsUndef) {
setLow = isReflexive && (retHighest || isDef);
} else if (computed == null) {
setLow = false;
} else {
setLow = retHighest ? (computed <= value) : (computed < value);
}
if (setLow) {
low = mid + 1;
} else {
high = mid;
}
}
return nativeMin(high, MAX_ARRAY_INDEX);
}
|
|
A specialized version of API
private
Params
func
Function
The function to bind.
thisArg
*
The
this binding of func.
[argCount]
number
The number of arguments to provide to
func.
Returns
Function
Returns the callback.
|
function bindCallback(func, thisArg, argCount) {
if (typeof func != 'function') {
return identity;
}
if (thisArg === undefined) {
return func;
}
switch (argCount) {
case 1: return function(value) {
return func.call(thisArg, value);
};
case 3: return function(value, index, collection) {
return func.call(thisArg, value, index, collection);
};
case 4: return function(accumulator, value, index, collection) {
return func.call(thisArg, accumulator, value, index, collection);
};
case 5: return function(value, other, key, object, source) {
return func.call(thisArg, value, other, key, object, source);
};
}
return function() {
return func.apply(thisArg, arguments);
};
}
|
|
Creates a clone of the given array buffer. API
private
Params
buffer
ArrayBuffer
The array buffer to clone.
Returns
ArrayBuffer
Returns the cloned array buffer.
|
function bufferClone(buffer) {
var result = new ArrayBuffer(buffer.byteLength),
view = new Uint8Array(result);
view.set(new Uint8Array(buffer));
return result;
}
|
|
Creates an array that is the composition of partially applied arguments, placeholders, and provided arguments into a single array of arguments. API
private
Params
args
Array
Object
The provided arguments.
partials
Array
The arguments to prepend to those provided.
holders
Array
The
partials placeholder indexes.
Returns
Array
Returns the new array of composed arguments.
|
function composeArgs(args, partials, holders) {
var holdersLength = holders.length,
argsIndex = -1,
argsLength = nativeMax(args.length - holdersLength, 0),
leftIndex = -1,
leftLength = partials.length,
result = Array(leftLength + argsLength);
while (++leftIndex < leftLength) {
result[leftIndex] = partials[leftIndex];
}
while (++argsIndex < holdersLength) {
result[holders[argsIndex]] = args[argsIndex];
}
while (argsLength--) {
result[leftIndex++] = args[argsIndex++];
}
return result;
}
|
|
This function is like API
private
Params
args
Array
Object
The provided arguments.
partials
Array
The arguments to append to those provided.
holders
Array
The
partials placeholder indexes.
Returns
Array
Returns the new array of composed arguments.
|
function composeArgsRight(args, partials, holders) {
var holdersIndex = -1,
holdersLength = holders.length,
argsIndex = -1,
argsLength = nativeMax(args.length - holdersLength, 0),
rightIndex = -1,
rightLength = partials.length,
result = Array(argsLength + rightLength);
while (++argsIndex < argsLength) {
result[argsIndex] = args[argsIndex];
}
var offset = argsIndex;
while (++rightIndex < rightLength) {
result[offset + rightIndex] = partials[rightIndex];
}
while (++holdersIndex < holdersLength) {
result[offset + holders[holdersIndex]] = args[argsIndex++];
}
return result;
}
|
|
Creates a API
private
Params
setter
Function
The function to set keys and values of the accumulator object.
[initializer]
Function
The function to initialize the accumulator object.
Returns
Function
Returns the new aggregator function.
|
function createAggregator(setter, initializer) {
return function(collection, iteratee, thisArg) {
var result = initializer ? initializer() : {};
iteratee = getCallback(iteratee, thisArg, 3);
if (isArray(collection)) {
var index = -1,
length = collection.length;
while (++index < length) {
var value = collection[index];
setter(result, value, iteratee(value, index, collection), collection);
}
} else {
baseEach(collection, function(value, key, collection) {
setter(result, value, iteratee(value, key, collection), collection);
});
}
return result;
};
}
|
|
Creates a API
private
Params
assigner
Function
The function to assign values.
Returns
Function
Returns the new assigner function.
|
function createAssigner(assigner) {
return restParam(function(object, sources) {
var index = -1,
length = object == null ? 0 : sources.length,
customizer = length > 2 ? sources[length - 2] : undefined,
guard = length > 2 ? sources[2] : undefined,
thisArg = length > 1 ? sources[length - 1] : undefined;
if (typeof customizer == 'function') {
customizer = bindCallback(customizer, thisArg, 5);
length -= 2;
} else {
customizer = typeof thisArg == 'function' ? thisArg : undefined;
length -= (customizer ? 1 : 0);
}
if (guard && isIterateeCall(sources[0], sources[1], guard)) {
customizer = length < 3 ? undefined : customizer;
length = 1;
}
while (++index < length) {
var source = sources[index];
if (source) {
assigner(object, source, customizer);
}
}
return object;
});
}
|
|
Creates a API
private
Params
eachFunc
Function
The function to iterate over a collection.
[fromRight]
boolean
Specify iterating from right to left.
Returns
Function
Returns the new base function.
|
function createBaseEach(eachFunc, fromRight) {
return function(collection, iteratee) {
var length = collection ? getLength(collection) : 0;
if (!isLength(length)) {
return eachFunc(collection, iteratee);
}
var index = fromRight ? length : -1,
iterable = toObject(collection);
while ((fromRight ? index-- : ++index < length)) {
if (iteratee(iterable[index], index, iterable) === false) {
break;
}
}
return collection;
};
}
|
|
Creates a base function for API
private
Params
[fromRight]
boolean
Specify iterating from right to left.
Returns
Function
Returns the new base function.
|
function createBaseFor(fromRight) {
return function(object, iteratee, keysFunc) {
var iterable = toObject(object),
props = keysFunc(object),
length = props.length,
index = fromRight ? length : -1;
while ((fromRight ? index-- : ++index < length)) {
var key = props[index];
if (iteratee(iterable[key], key, iterable) === false) {
break;
}
}
return object;
};
}
|
|
Creates a function that wraps API
private
Params
func
Function
The function to bind.
[thisArg]
*
The
this binding of func.
Returns
Function
Returns the new bound function.
|
function createBindWrapper(func, thisArg) {
var Ctor = createCtorWrapper(func);
function wrapper() {
var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
return fn.apply(thisArg, arguments);
}
return wrapper;
}
|
|
Creates a API
private
Params
[values]
Array
The values to cache.
Returns
null
Object
Returns the new cache object if
Set is supported, else null.
|
function createCache(values) {
return (nativeCreate && Set) ? new SetCache(values) : null;
}
|
|
Creates a function that produces compound words out of the words in a given string. API
private
Params
callback
Function
The function to combine each word.
Returns
Function
Returns the new compounder function.
|
function createCompounder(callback) {
return function(string) {
var index = -1,
array = words(deburr(string)),
length = array.length,
result = '';
while (++index < length) {
result = callback(result, array[index], index);
}
return result;
};
}
|
|
Creates a function that produces an instance of API
private
Params
Ctor
Function
The constructor to wrap.
Returns
Function
Returns the new wrapped function.
|
function createCtorWrapper(Ctor) {
return function() {
|
|
Use a |
var args = arguments;
switch (args.length) {
case 0: return new Ctor;
case 1: return new Ctor(args[0]);
case 2: return new Ctor(args[0], args[1]);
case 3: return new Ctor(args[0], args[1], args[2]);
case 4: return new Ctor(args[0], args[1], args[2], args[3]);
case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
}
var thisBinding = baseCreate(Ctor.prototype),
result = Ctor.apply(thisBinding, args);
|
|
Mimic the constructor's |
return isObject(result) ? result : thisBinding;
};
}
|
|
Creates a API
private
Params
flag
boolean
The curry bit flag.
Returns
Function
Returns the new curry function.
|
function createCurry(flag) {
function curryFunc(func, arity, guard) {
if (guard && isIterateeCall(func, arity, guard)) {
arity = undefined;
}
var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity);
result.placeholder = curryFunc.placeholder;
return result;
}
return curryFunc;
}
|
|
Creates a API
private
Params
assigner
Function
The function to assign values.
customizer
Function
The function to customize assigned values.
Returns
Function
Returns the new defaults function.
|
function createDefaults(assigner, customizer) {
return restParam(function(args) {
var object = args[0];
if (object == null) {
return object;
}
args.push(customizer);
return assigner.apply(undefined, args);
});
}
|
|
Creates a API
private
Params
comparator
Function
The function used to compare values.
exValue
*
The initial extremum value.
Returns
Function
Returns the new extremum function.
|
function createExtremum(comparator, exValue) {
return function(collection, iteratee, thisArg) {
if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
iteratee = undefined;
}
iteratee = getCallback(iteratee, thisArg, 3);
if (iteratee.length == 1) {
collection = isArray(collection) ? collection : toIterable(collection);
var result = arrayExtremum(collection, iteratee, comparator, exValue);
if (!(collection.length && result === exValue)) {
return result;
}
}
return baseExtremum(collection, iteratee, comparator, exValue);
};
}
|
|
Creates a API
private
Params
eachFunc
Function
The function to iterate over a collection.
[fromRight]
boolean
Specify iterating from right to left.
Returns
Function
Returns the new find function.
|
function createFind(eachFunc, fromRight) {
return function(collection, predicate, thisArg) {
predicate = getCallback(predicate, thisArg, 3);
if (isArray(collection)) {
var index = baseFindIndex(collection, predicate, fromRight);
return index > -1 ? collection[index] : undefined;
}
return baseFind(collection, predicate, eachFunc);
};
}
|
|
Creates a API
private
Params
[fromRight]
boolean
Specify iterating from right to left.
Returns
Function
Returns the new find function.
|
function createFindIndex(fromRight) {
return function(array, predicate, thisArg) {
if (!(array && array.length)) {
return -1;
}
predicate = getCallback(predicate, thisArg, 3);
return baseFindIndex(array, predicate, fromRight);
};
}
|
|
Creates a API
private
Params
objectFunc
Function
The function to iterate over an object.
Returns
Function
Returns the new find function.
|
function createFindKey(objectFunc) {
return function(object, predicate, thisArg) {
predicate = getCallback(predicate, thisArg, 3);
return baseFind(object, predicate, objectFunc, true);
};
}
|
|
Creates a API
private
Params
[fromRight]
boolean
Specify iterating from right to left.
Returns
Function
Returns the new flow function.
|
function createFlow(fromRight) {
return function() {
var wrapper,
length = arguments.length,
index = fromRight ? length : -1,
leftIndex = 0,
funcs = Array(length);
while ((fromRight ? index-- : ++index < length)) {
var func = funcs[leftIndex++] = arguments[index];
if (typeof func != 'function') {
throw new TypeError(FUNC_ERROR_TEXT);
}
if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') {
wrapper = new LodashWrapper([], true);
}
}
index = wrapper ? -1 : length;
while (++index < length) {
func = funcs[index];
var funcName = getFuncName(func),
data = funcName == 'wrapper' ? getData(func) : undefined;
if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) {
wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
} else {
wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func);
}
}
return function() {
var args = arguments,
value = args[0];
if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) {
return wrapper.plant(value).value();
}
var index = 0,
result = length ? funcs[index].apply(this, args) : value;
while (++index < length) {
result = funcs[index].call(this, result);
}
return result;
};
};
}
|
|
Creates a function for API
private
Params
arrayFunc
Function
The function to iterate over an array.
eachFunc
Function
The function to iterate over a collection.
Returns
Function
Returns the new each function.
|
function createForEach(arrayFunc, eachFunc) {
return function(collection, iteratee, thisArg) {
return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))
? arrayFunc(collection, iteratee)
: eachFunc(collection, bindCallback(iteratee, thisArg, 3));
};
}
|
|
Creates a function for API
private
Params
objectFunc
Function
The function to iterate over an object.
Returns
Function
Returns the new each function.
|
function createForIn(objectFunc) {
return function(object, iteratee, thisArg) {
if (typeof iteratee != 'function' || thisArg !== undefined) {
iteratee = bindCallback(iteratee, thisArg, 3);
}
return objectFunc(object, iteratee, keysIn);
};
}
|
|
Creates a function for API
private
Params
objectFunc
Function
The function to iterate over an object.
Returns
Function
Returns the new each function.
|
function createForOwn(objectFunc) {
return function(object, iteratee, thisArg) {
if (typeof iteratee != 'function' || thisArg !== undefined) {
iteratee = bindCallback(iteratee, thisArg, 3);
}
return objectFunc(object, iteratee);
};
}
|
|
Creates a function for API
private
Params
[isMapKeys]
boolean
Specify mapping keys instead of values.
Returns
Function
Returns the new map function.
|
function createObjectMapper(isMapKeys) {
return function(object, iteratee, thisArg) {
var result = {};
iteratee = getCallback(iteratee, thisArg, 3);
baseForOwn(object, function(value, key, object) {
var mapped = iteratee(value, key, object);
key = isMapKeys ? mapped : key;
value = isMapKeys ? value : mapped;
result[key] = value;
});
return result;
};
}
|
|
Creates a function for API
private
Params
[fromRight]
boolean
Specify padding from the right.
Returns
Function
Returns the new pad function.
|
function createPadDir(fromRight) {
return function(string, length, chars) {
string = baseToString(string);
return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string);
};
}
|
|
Creates a API
private
Params
flag
boolean
The partial bit flag.
Returns
Function
Returns the new partial function.
|
function createPartial(flag) {
var partialFunc = restParam(function(func, partials) {
var holders = replaceHolders(partials, partialFunc.placeholder);
return createWrapper(func, flag, undefined, partials, holders);
});
return partialFunc;
}
|
|
Creates a function for API
private
Params
arrayFunc
Function
The function to iterate over an array.
eachFunc
Function
The function to iterate over a collection.
Returns
Function
Returns the new each function.
|
function createReduce(arrayFunc, eachFunc) {
return function(collection, iteratee, accumulator, thisArg) {
var initFromArray = arguments.length < 3;
return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))
? arrayFunc(collection, iteratee, accumulator, initFromArray)
: baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc);
};
}
|
|
Creates a function that wraps API
private
Params
func
Function
string
The function or method name to reference.
bitmask
number
The bitmask of flags. See
createWrapper for more details.
[thisArg]
*
The
this binding of func.
[partials]
Array
The arguments to prepend to those provided to the new function.
[holders]
Array
The
partials placeholder indexes.
[partialsRight]
Array
The arguments to append to those provided to the new function.
[holdersRight]
Array
The
partialsRight placeholder indexes.
[argPos]
Array
The argument positions of the new function.
[ary]
number
The arity cap of
func.
[arity]
number
The arity of
func.
Returns
Function
Returns the new wrapped function.
|
function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
var isAry = bitmask & ARY_FLAG,
isBind = bitmask & BIND_FLAG,
isBindKey = bitmask & BIND_KEY_FLAG,
isCurry = bitmask & CURRY_FLAG,
isCurryBound = bitmask & CURRY_BOUND_FLAG,
isCurryRight = bitmask & CURRY_RIGHT_FLAG,
Ctor = isBindKey ? undefined : createCtorWrapper(func);
function wrapper() {
|
|
Avoid |
var length = arguments.length,
index = length,
args = Array(length);
while (index--) {
args[index] = arguments[index];
}
if (partials) {
args = composeArgs(args, partials, holders);
}
if (partialsRight) {
args = composeArgsRight(args, partialsRight, holdersRight);
}
if (isCurry || isCurryRight) {
var placeholder = wrapper.placeholder,
argsHolders = replaceHolders(args, placeholder);
length -= argsHolders.length;
if (length < arity) {
var newArgPos = argPos ? arrayCopy(argPos) : undefined,
newArity = nativeMax(arity - length, 0),
newsHolders = isCurry ? argsHolders : undefined,
newHoldersRight = isCurry ? undefined : argsHolders,
newPartials = isCurry ? args : undefined,
newPartialsRight = isCurry ? undefined : args;
bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);
bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);
if (!isCurryBound) {
bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);
}
var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity],
result = createHybridWrapper.apply(undefined, newData);
if (isLaziable(func)) {
setData(result, newData);
}
result.placeholder = placeholder;
return result;
}
}
var thisBinding = isBind ? thisArg : this,
fn = isBindKey ? thisBinding[func] : func;
if (argPos) {
args = reorder(args, argPos);
}
if (isAry && ary < args.length) {
args.length = ary;
}
if (this && this !== root && this instanceof wrapper) {
fn = Ctor || createCtorWrapper(func);
}
return fn.apply(thisBinding, args);
}
return wrapper;
}
|
|
Creates the padding required for API
private
Params
string
string
The string to create padding for.
[length=0]
number
The padding length.
[chars='
string
'] The string used as padding.
Returns
string
Returns the pad for
string.
|
function createPadding(string, length, chars) {
var strLength = string.length;
length = +length;
if (strLength >= length || !nativeIsFinite(length)) {
return '';
}
var padLength = length - strLength;
chars = chars == null ? ' ' : (chars + '');
return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength);
}
|
|
Creates a function that wraps API
private
Params
func
Function
The function to partially apply arguments to.
bitmask
number
The bitmask of flags. See
createWrapper for more details.
thisArg
*
The
this binding of func.
partials
Array
The arguments to prepend to those provided to the new function.
Returns
Function
Returns the new bound function.
|
function createPartialWrapper(func, bitmask, thisArg, partials) {
var isBind = bitmask & BIND_FLAG,
Ctor = createCtorWrapper(func);
function wrapper() {
|
|
Avoid |
var argsIndex = -1,
argsLength = arguments.length,
leftIndex = -1,
leftLength = partials.length,
args = Array(leftLength + argsLength);
while (++leftIndex < leftLength) {
args[leftIndex] = partials[leftIndex];
}
while (argsLength--) {
args[leftIndex++] = arguments[++argsIndex];
}
var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
return fn.apply(isBind ? thisArg : this, args);
}
return wrapper;
}
|
|
Creates a API
private
Params
methodName
string
The name of the
Math method to use when rounding.
Returns
Function
Returns the new round function.
|
function createRound(methodName) {
var func = Math[methodName];
return function(number, precision) {
precision = precision === undefined ? 0 : (+precision || 0);
if (precision) {
precision = pow(10, precision);
return func(number * precision) / precision;
}
return func(number);
};
}
|
|
Creates a API
private
Params
[retHighest]
boolean
Specify returning the highest qualified index.
Returns
Function
Returns the new index function.
|
function createSortedIndex(retHighest) {
return function(array, value, iteratee, thisArg) {
var callback = getCallback(iteratee);
return (iteratee == null && callback === baseCallback)
? binaryIndex(array, value, retHighest)
: binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest);
};
}
|
|
Creates a function that either curries or invokes API
private
Params
func
Function
string
The function or method name to reference.
bitmask
number
The bitmask of flags.
The bitmask may be composed of the following flags:
1 -
.bind
2 - .bindKey
4 - .curry or .curryRight of a bound function
8 - .curry
16 - .curryRight
32 - .partial
64 - .partialRight
128 - .rearg
256 - .ary
[thisArg]
*
The
this binding of func.
[partials]
Array
The arguments to be partially applied.
[holders]
Array
The
partials placeholder indexes.
[argPos]
Array
The argument positions of the new function.
[ary]
number
The arity cap of
func.
[arity]
number
The arity of
func.
Returns
Function
Returns the new wrapped function.
|
function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
var isBindKey = bitmask & BIND_KEY_FLAG;
if (!isBindKey && typeof func != 'function') {
throw new TypeError(FUNC_ERROR_TEXT);
}
var length = partials ? partials.length : 0;
if (!length) {
bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);
partials = holders = undefined;
}
length -= (holders ? holders.length : 0);
if (bitmask & PARTIAL_RIGHT_FLAG) {
var partialsRight = partials,
holdersRight = holders;
partials = holders = undefined;
}
var data = isBindKey ? undefined : getData(func),
newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];
if (data) {
mergeData(newData, data);
bitmask = newData[1];
arity = newData[9];
}
newData[9] = arity == null
? (isBindKey ? 0 : func.length)
: (nativeMax(arity - length, 0) || 0);
if (bitmask == BIND_FLAG) {
var result = createBindWrapper(newData[0], newData[2]);
} else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) {
result = createPartialWrapper.apply(undefined, newData);
} else {
result = createHybridWrapper.apply(undefined, newData);
}
var setter = data ? baseSetData : setData;
return setter(result, newData);
}
|
|
A specialized version of API
private
Params
array
Array
The array to compare.
other
Array
The other array to compare.
equalFunc
Function
The function to determine equivalents of values.
[customizer]
Function
The function to customize comparing arrays.
[isLoose]
boolean
Specify performing partial comparisons.
[stackA]
Array
Tracks traversed
value objects.
[stackB]
Array
Tracks traversed
other objects.
Returns
boolean
Returns
true if the arrays are equivalent, else false.
|
function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {
var index = -1,
arrLength = array.length,
othLength = other.length;
if (arrLength != othLength && !(isLoose && othLength > arrLength)) {
return false;
}
|
|
Ignore non-index properties. |
while (++index < arrLength) {
var arrValue = array[index],
othValue = other[index],
result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;
if (result !== undefined) {
if (result) {
continue;
}
return false;
}
|
|
Recursively compare arrays (susceptible to call stack limits). |
if (isLoose) {
if (!arraySome(other, function(othValue) {
return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);
})) {
return false;
}
} else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {
return false;
}
}
return true;
}
|
|
A specialized version of Note: This function only supports comparing values with tags of
API
private
Params
object
Object
The object to compare.
other
Object
The other object to compare.
tag
string
The
toStringTag of the objects to compare.
Returns
boolean
Returns
true if the objects are equivalent, else false.
|
function equalByTag(object, other, tag) {
switch (tag) {
case boolTag:
case dateTag:
|
|
Coerce dates and booleans to numbers, dates to milliseconds and booleans
to |
return +object == +other;
case errorTag:
return object.name == other.name && object.message == other.message;
case numberTag:
|
|
Treat |
return (object != +object)
? other != +other
: object == +other;
case regexpTag:
case stringTag:
|
|
Coerce regexes to strings and treat strings primitives and string objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. |
return object == (other + '');
}
return false;
}
|
|
A specialized version of API
private
Params
object
Object
The object to compare.
other
Object
The other object to compare.
equalFunc
Function
The function to determine equivalents of values.
[customizer]
Function
The function to customize comparing values.
[isLoose]
boolean
Specify performing partial comparisons.
[stackA]
Array
Tracks traversed
value objects.
[stackB]
Array
Tracks traversed
other objects.
Returns
boolean
Returns
true if the objects are equivalent, else false.
|
function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
var objProps = keys(object),
objLength = objProps.length,
othProps = keys(other),
othLength = othProps.length;
if (objLength != othLength && !isLoose) {
return false;
}
var index = objLength;
while (index--) {
var key = objProps[index];
if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {
return false;
}
}
var skipCtor = isLoose;
while (++index < objLength) {
key = objProps[index];
var objValue = object[key],
othValue = other[key],
result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;
|
|
Recursively compare objects (susceptible to call stack limits). |
if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {
return false;
}
skipCtor || (skipCtor = key == 'constructor');
}
if (!skipCtor) {
var objCtor = object.constructor,
othCtor = other.constructor;
|
|
Non |
if (objCtor != othCtor &&
('constructor' in object && 'constructor' in other) &&
!(typeof objCtor == 'function' && objCtor instanceof objCtor &&
typeof othCtor == 'function' && othCtor instanceof othCtor)) {
return false;
}
}
return true;
}
|
|
Gets the appropriate "callback" function. If the API
private
Returns
Function
Returns the chosen function or its result.
|
function getCallback(func, thisArg, argCount) {
var result = lodash.callback || callback;
result = result === callback ? baseCallback : result;
return argCount ? result(func, thisArg, argCount) : result;
}
|
|
Gets metadata for API
private
Params
func
Function
The function to query.
Returns
*
Returns the metadata for
func.
|
var getData = !metaMap ? noop : function(func) {
return metaMap.get(func);
};
|
|
Gets the name of API
private
Params
func
Function
The function to query.
Returns
string
Returns the function name.
|
function getFuncName(func) {
var result = func.name,
array = realNames[result],
length = array ? array.length : 0;
while (length--) {
var data = array[length],
otherFunc = data.func;
if (otherFunc == null || otherFunc == func) {
return data.name;
}
}
return result;
}
|
|
Gets the appropriate "indexOf" function. If the API
private
Returns
Function
number
Returns the chosen function or its result.
|
function getIndexOf(collection, target, fromIndex) {
var result = lodash.indexOf || indexOf;
result = result === indexOf ? baseIndexOf : result;
return collection ? result(collection, target, fromIndex) : result;
}
|
|
Gets the "length" property value of Note: This function is used to avoid a JIT bug that affects Safari on at least iOS 8.1-8.3 ARM64. API
private
Params
object
Object
The object to query.
Returns
*
Returns the "length" value.
|
var getLength = baseProperty('length');
|
|
Gets the propery names, values, and compare flags of API
private
Params
object
Object
The object to query.
Returns
Array
Returns the match data of
object.
|
function getMatchData(object) {
var result = pairs(object),
length = result.length;
while (length--) {
result[length][2] = isStrictComparable(result[length][1]);
}
return result;
}
|
|
Gets the native function at API
private
Params
object
Object
The object to query.
key
string
The key of the method to get.
Returns
*
Returns the function if it's native, else
undefined.
|
function getNative(object, key) {
var value = object == null ? undefined : object[key];
return isNative(value) ? value : undefined;
}
|
|
Gets the view, applying any API
private
Params
start
number
The start of the view.
end
number
The end of the view.
transforms
Array
The transformations to apply to the view.
Returns
Object
Returns an object containing the
start and end
positions of the view.
|
function getView(start, end, transforms) {
var index = -1,
length = transforms.length;
while (++index < length) {
var data = transforms[index],
size = data.size;
switch (data.type) {
case 'drop': start += size; break;
case 'dropRight': end -= size; break;
case 'take': end = nativeMin(end, start + size); break;
case 'takeRight': start = nativeMax(start, end - size); break;
}
}
return { 'start': start, 'end': end };
}
|
|
Initializes an array clone. API
private
Params
array
Array
The array to clone.
Returns
Array
Returns the initialized clone.
|
function initCloneArray(array) {
var length = array.length,
result = new array.constructor(length);
|
|
Add array properties assigned by |
if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
result.index = array.index;
result.input = array.input;
}
return result;
}
|
|
Initializes an object clone. API
private
Params
object
Object
The object to clone.
Returns
Object
Returns the initialized clone.
|
function initCloneObject(object) {
var Ctor = object.constructor;
if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {
Ctor = Object;
}
return new Ctor;
}
|
|
Initializes an object clone based on its Note: This function only supports cloning values with tags of
API
private
Params
object
Object
The object to clone.
tag
string
The
toStringTag of the object to clone.
[isDeep]
boolean
Specify a deep clone.
Returns
Object
Returns the initialized clone.
|
function initCloneByTag(object, tag, isDeep) {
var Ctor = object.constructor;
switch (tag) {
case arrayBufferTag:
return bufferClone(object);
case boolTag:
case dateTag:
return new Ctor(+object);
case float32Tag: case float64Tag:
case int8Tag: case int16Tag: case int32Tag:
case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
var buffer = object.buffer;
return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);
case numberTag:
case stringTag:
return new Ctor(object);
case regexpTag:
var result = new Ctor(object.source, reFlags.exec(object));
result.lastIndex = object.lastIndex;
}
return result;
}
|
|
Invokes the method at API
private
Params
object
Object
The object to query.
path
Array
string
The path of the method to invoke.
args
Array
The arguments to invoke the method with.
Returns
*
Returns the result of the invoked method.
|
function invokePath(object, path, args) {
if (object != null && !isKey(path, object)) {
path = toPath(path);
object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
path = last(path);
}
var func = object == null ? object : object[path];
return func == null ? undefined : func.apply(object, args);
}
|
|
Checks if API
private
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is array-like, else false.
|
function isArrayLike(value) {
return value != null && isLength(getLength(value));
}
|
|
Checks if API
private
Params
value
*
The value to check.
[length=MAX_SAFE_INTEGER]
number
The upper bounds of a valid index.
Returns
boolean
Returns
true if value is a valid index, else false.
|
function isIndex(value, length) {
value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
length = length == null ? MAX_SAFE_INTEGER : length;
return value > -1 && value % 1 == 0 && value < length;
}
|
|
Checks if the provided arguments are from an iteratee call. API
private
Params
value
The potential iteratee value argument.
index
The potential iteratee index or key argument.
object
*
The potential iteratee object argument.
Returns
boolean
Returns
true if the arguments are from an iteratee call, else false.
|
function isIterateeCall(value, index, object) {
if (!isObject(object)) {
return false;
}
var type = typeof index;
if (type == 'number'
? (isArrayLike(object) && isIndex(index, object.length))
: (type == 'string' && index in object)) {
var other = object[index];
return value === value ? (value === other) : (other !== other);
}
return false;
}
|
|
Checks if API
private
Params
value
*
The value to check.
[object]
Object
The object to query keys on.
Returns
boolean
Returns
true if value is a property name, else false.
|
function isKey(value, object) {
var type = typeof value;
if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {
return true;
}
if (isArray(value)) {
return false;
}
var result = !reIsDeepProp.test(value);
return result || (object != null && value in toObject(object));
}
|
|
Checks if API
private
Params
func
Function
The function to check.
Returns
boolean
Returns
true if func has a lazy counterpart, else false.
|
function isLaziable(func) {
var funcName = getFuncName(func);
if (!(funcName in LazyWrapper.prototype)) {
return false;
}
var other = lodash[funcName];
if (func === other) {
return true;
}
var data = getData(other);
return !!data && func === data[0];
}
|
|
Checks if Note: This function is based on API
private
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is a valid length, else false.
|
function isLength(value) {
return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
}
|
|
Checks if API
private
Params
value
*
The value to check.
Returns
boolean
Returns
true if value if suitable for strict
equality comparisons, else false.
|
function isStrictComparable(value) {
return value === value && !isObject(value);
}
|
|
Merges the function metadata of Merging metadata reduces the number of wrappers required to invoke a function.
This is possible because methods like API
private
Params
data
Array
The destination metadata.
source
Array
The source metadata.
Returns
Array
Returns
data.
|
function mergeData(data, source) {
var bitmask = data[1],
srcBitmask = source[1],
newBitmask = bitmask | srcBitmask,
isCommon = newBitmask < ARY_FLAG;
var isCombo =
(srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) ||
(srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) ||
(srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG);
|
|
Exit early if metadata can't be merged. |
if (!(isCommon || isCombo)) {
return data;
}
|
|
Use source |
if (srcBitmask & BIND_FLAG) {
data[2] = source[2];
|
|
Set when currying a bound function. |
newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG;
}
|
|
Compose partial arguments. |
var value = source[3];
if (value) {
var partials = data[3];
data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value);
data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]);
}
|
|
Compose partial right arguments. |
value = source[5];
if (value) {
partials = data[5];
data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value);
data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]);
}
|
|
Use source |
value = source[7];
if (value) {
data[7] = arrayCopy(value);
}
|
|
Use source |
if (srcBitmask & ARY_FLAG) {
data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
}
|
|
Use source |
if (data[9] == null) {
data[9] = source[9];
}
|
|
Use source |
data[0] = source[0];
data[1] = newBitmask;
return data;
}
|
|
Used by API
private
Params
objectValue
The destination object property value.
sourceValue
The source object property value.
Returns
*
Returns the value to assign to the destination object.
|
function mergeDefaults(objectValue, sourceValue) {
return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults);
}
|
|
A specialized version of API
private
Params
object
Object
The source object.
props
string[]
The property names to pick.
Returns
Object
Returns the new object.
|
function pickByArray(object, props) {
object = toObject(object);
var index = -1,
length = props.length,
result = {};
while (++index < length) {
var key = props[index];
if (key in object) {
result[key] = object[key];
}
}
return result;
}
|
|
A specialized version of API
private
Params
object
Object
The source object.
predicate
Function
The function invoked per iteration.
Returns
Object
Returns the new object.
|
function pickByCallback(object, predicate) {
var result = {};
baseForIn(object, function(value, key, object) {
if (predicate(value, key, object)) {
result[key] = value;
}
});
return result;
}
|
|
Reorder API
private
Params
array
Array
The array to reorder.
indexes
Array
The arranged array indexes.
Returns
Array
Returns
array.
|
function reorder(array, indexes) {
var arrLength = array.length,
length = nativeMin(indexes.length, arrLength),
oldArray = arrayCopy(array);
while (length--) {
var index = indexes[length];
array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
}
return array;
}
|
|
Sets metadata for Note: If this function becomes hot, i.e. is invoked a lot in a short period of time, it will trip its breaker and transition to an identity function to avoid garbage collection pauses in V8. See V8 issue 2070 for more details. API
private
Params
func
Function
The function to associate metadata with.
data
*
The metadata.
Returns
Function
Returns
func.
|
var setData = (function() {
var count = 0,
lastCalled = 0;
return function(key, value) {
var stamp = now(),
remaining = HOT_SPAN - (stamp - lastCalled);
lastCalled = stamp;
if (remaining > 0) {
if (++count >= HOT_COUNT) {
return key;
}
} else {
count = 0;
}
return baseSetData(key, value);
};
}());
|
|
A fallback implementation of API
private
Params
object
Object
The object to query.
Returns
Array
Returns the array of property names.
|
function shimKeys(object) {
var props = keysIn(object),
propsLength = props.length,
length = propsLength && object.length;
var allowIndexes = !!length && isLength(length) &&
(isArray(object) || isArguments(object));
var index = -1,
result = [];
while (++index < propsLength) {
var key = props[index];
if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {
result.push(key);
}
}
return result;
}
|
|
Converts API
private
Params
value
*
The value to process.
Returns
Array
Object
Returns the array-like object.
|
function toIterable(value) {
if (value == null) {
return [];
}
if (!isArrayLike(value)) {
return values(value);
}
return isObject(value) ? value : Object(value);
}
|
|
Converts API
private
Params
value
*
The value to process.
Returns
Object
Returns the object.
|
function toObject(value) {
return isObject(value) ? value : Object(value);
}
|
|
Converts API
private
Params
value
*
The value to process.
Returns
Array
Returns the property path array.
|
function toPath(value) {
if (isArray(value)) {
return value;
}
var result = [];
baseToString(value).replace(rePropName, function(match, number, quote, string) {
result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
});
return result;
}
|
|
Creates a clone of API
private
Params
wrapper
Object
The wrapper to clone.
Returns
Object
Returns the cloned wrapper.
|
function wrapperClone(wrapper) {
return wrapper instanceof LazyWrapper
? wrapper.clone()
: new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__));
}
/*------------------------------------------------------------------------*/
|
|
Creates an array of elements split into groups the length of static
memberOf
category
Array
Params
array
Array
The array to process.
[size=1]
number
The length of each chunk.
param-
Object
[guard] Enables use as a callback for functions like
.map.
Returns
Array
Returns the new array containing chunks.
example
.chunk(['a',
'b', 'c', 'd'], 2);
// => [['a', 'b'], ['c', 'd']]
.chunk(['a', 'b', 'c', 'd'], 3);
// => [['a', 'b', 'c'], ['d']]
|
function chunk(array, size, guard) {
if (guard ? isIterateeCall(array, size, guard) : size == null) {
size = 1;
} else {
size = nativeMax(nativeFloor(size) || 1, 1);
}
var index = 0,
length = array ? array.length : 0,
resIndex = -1,
result = Array(nativeCeil(length / size));
while (index < length) {
result[++resIndex] = baseSlice(array, index, (index += size));
}
return result;
}
|
|
Creates an array with all falsey values removed. The values static
memberOf
category
Array
Params
array
Array
The array to compact.
Returns
Array
Returns the new array of filtered values.
example
.compact([0,
1, false, 2, '', 3]);
// => [1, 2, 3]
|
function compact(array) {
var index = -1,
length = array ? array.length : 0,
resIndex = -1,
result = [];
while (++index < length) {
var value = array[index];
if (value) {
result[++resIndex] = value;
}
}
return result;
}
|
|
Creates an array of unique static
memberOf
category
Array
Params
array
Array
The array to inspect.
[values]
...Array
The arrays of values to exclude.
Returns
Array
Returns the new array of filtered values.
example
.difference([1,
2, 3], [4, 2]);
// => [1, 3]
|
var difference = restParam(function(array, values) {
return (isObjectLike(array) && isArrayLike(array))
? baseDifference(array, baseFlatten(values, false, true))
: [];
});
|
|
Creates a slice of static
memberOf
category
Array
Params
array
Array
The array to query.
[n=1]
number
The number of elements to drop.
param-
Object
[guard] Enables use as a callback for functions like
.map.
Returns
Array
Returns the slice of
array.
example
.drop([1,
2, 3]);
// => [2, 3]
.drop([1, 2, 3], 2);
// => [3]
.drop([1, 2, 3], 5);
// => []
.drop([1, 2, 3], 0);
// => [1, 2, 3]
|
function drop(array, n, guard) {
var length = array ? array.length : 0;
if (!length) {
return [];
}
if (guard ? isIterateeCall(array, n, guard) : n == null) {
n = 1;
}
return baseSlice(array, n < 0 ? 0 : n);
}
|
|
Creates a slice of static
memberOf
category
Array
Params
array
Array
The array to query.
[n=1]
number
The number of elements to drop.
param-
Object
[guard] Enables use as a callback for functions like
.map.
Returns
Array
Returns the slice of
array.
example
.dropRight([1,
2, 3]);
// => [1, 2]
.dropRight([1, 2, 3], 2);
// => [1]
.dropRight([1, 2, 3], 5);
// => []
.dropRight([1, 2, 3], 0);
// => [1, 2, 3]
|
function dropRight(array, n, guard) {
var length = array ? array.length : 0;
if (!length) {
return [];
}
if (guard ? isIterateeCall(array, n, guard) : n == null) {
n = 1;
}
n = length - (+n || 0);
return baseSlice(array, 0, n < 0 ? 0 : n);
}
|
|
Creates a slice of If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
category
Array
Params
array
Array
The array to query.
[predicate=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of predicate.
Returns
Array
Returns the slice of
array.
example
.dropRightWhile([1,
2, 3], function(n) {
return n > 1;
});
// => [1]
var users = [
{ 'user': 'barney', 'active': true },
{ 'user': 'fred', 'active': false },
{ 'user': 'pebbles', 'active': false }
];
// using the
.matches callback shorthand
.pluck(.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');
// => ['barney', 'fred']
// using the .matchesProperty callback shorthand
.pluck(.dropRightWhile(users, 'active', false), 'user');
// => ['barney']
// using the _.property callback shorthand
.pluck(.dropRightWhile(users, 'active'), 'user');
// => ['barney', 'fred', 'pebbles']
|
function dropRightWhile(array, predicate, thisArg) {
return (array && array.length)
? baseWhile(array, getCallback(predicate, thisArg, 3), true, true)
: [];
}
|
|
Creates a slice of If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
category
Array
Params
array
Array
The array to query.
[predicate=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of predicate.
Returns
Array
Returns the slice of
array.
example
.dropWhile([1,
2, 3], function(n) {
return n < 3;
});
// => [3]
var users = [
{ 'user': 'barney', 'active': false },
{ 'user': 'fred', 'active': false },
{ 'user': 'pebbles', 'active': true }
];
// using the
.matches callback shorthand
.pluck(.dropWhile(users, { 'user': 'barney', 'active': false }), 'user');
// => ['fred', 'pebbles']
// using the .matchesProperty callback shorthand
.pluck(.dropWhile(users, 'active', false), 'user');
// => ['pebbles']
// using the _.property callback shorthand
.pluck(.dropWhile(users, 'active'), 'user');
// => ['barney', 'fred', 'pebbles']
|
function dropWhile(array, predicate, thisArg) {
return (array && array.length)
? baseWhile(array, getCallback(predicate, thisArg, 3), true)
: [];
}
|
|
Fills elements of Note: This method mutates static
memberOf
category
Array
Params
array
Array
The array to fill.
value
*
The value to fill
array with.
[start=0]
number
The start position.
[end=array.length]
number
The end position.
Returns
Array
Returns
array.
example
var
array = [1, 2, 3];
.fill(array, 'a');
console.log(array);
// => ['a', 'a', 'a']
.fill(Array(3), 2);
// => [2, 2, 2]
.fill([4, 6, 8], '', 1, 2);
// => [4, '', 8]
|
function fill(array, value, start, end) {
var length = array ? array.length : 0;
if (!length) {
return [];
}
if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
start = 0;
end = length;
}
return baseFill(array, value, start, end);
}
|
|
This method is like If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
category
Array
Params
array
Array
The array to search.
[predicate=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of predicate.
Returns
number
Returns the index of the found element, else
-1.
example
var
users = [
{ 'user': 'barney', 'active': false },
{ 'user': 'fred', 'active': false },
{ 'user': 'pebbles', 'active': true }
];
.findIndex(users, function(chr) {
return chr.user == 'barney';
});
// => 0
// using the
.matches callback shorthand
.findIndex(users, { 'user': 'fred', 'active': false });
// => 1
// using the .matchesProperty callback shorthand
.findIndex(users, 'active', false);
// => 0
// using the .property callback shorthand
_.findIndex(users, 'active');
// => 2
|
var findIndex = createFindIndex();
|
|
This method is like If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
category
Array
Params
array
Array
The array to search.
[predicate=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of predicate.
Returns
number
Returns the index of the found element, else
-1.
example
var
users = [
{ 'user': 'barney', 'active': true },
{ 'user': 'fred', 'active': false },
{ 'user': 'pebbles', 'active': false }
];
.findLastIndex(users, function(chr) {
return chr.user == 'pebbles';
});
// => 2
// using the
.matches callback shorthand
.findLastIndex(users, { 'user': 'barney', 'active': true });
// => 0
// using the .matchesProperty callback shorthand
.findLastIndex(users, 'active', false);
// => 2
// using the .property callback shorthand
_.findLastIndex(users, 'active');
// => 0
|
var findLastIndex = createFindIndex(true);
|
|
Gets the first element of static
memberOf
alias
head
category
Array
Params
array
Array
The array to query.
Returns
*
Returns the first element of
array.
example
.first([1,
2, 3]);
// => 1
_.first([]);
// => undefined
|
function first(array) {
return array ? array[0] : undefined;
}
|
|
Flattens a nested array. If static
memberOf
category
Array
Params
array
Array
The array to flatten.
[isDeep]
boolean
Specify a deep flatten.
param-
Object
[guard] Enables use as a callback for functions like
.map.
Returns
Array
Returns the new flattened array.
example
.flatten([1,
[2, 3, [4]]]);
// => [1, 2, 3, [4]]
// using
isDeep
.flatten([1, [2, 3, [4]]], true);
// => [1, 2, 3, 4]
|
function flatten(array, isDeep, guard) {
var length = array ? array.length : 0;
if (guard && isIterateeCall(array, isDeep, guard)) {
isDeep = false;
}
return length ? baseFlatten(array, isDeep) : [];
}
|
|
Recursively flattens a nested array. static
memberOf
category
Array
Params
array
Array
The array to recursively flatten.
Returns
Array
Returns the new flattened array.
example
.flattenDeep([1,
[2, 3, [4]]]);
// => [1, 2, 3, 4]
|
function flattenDeep(array) {
var length = array ? array.length : 0;
return length ? baseFlatten(array, true) : [];
}
|
|
Gets the index at which the first occurrence of static
memberOf
category
Array
Params
array
Array
The array to search.
value
*
The value to search for.
[fromIndex=0]
boolean
number
The index to search from or
true
to perform a binary search on a sorted array.
Returns
number
Returns the index of the matched value, else
-1.
example
.indexOf([1,
2, 1, 2], 2);
// => 1
// using
fromIndex
.indexOf([1, 2, 1, 2], 2, 2);
// => 3
// performing a binary search
.indexOf([1, 1, 2, 2], 2, true);
// => 2
|
function indexOf(array, value, fromIndex) {
var length = array ? array.length : 0;
if (!length) {
return -1;
}
if (typeof fromIndex == 'number') {
fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;
} else if (fromIndex) {
var index = binaryIndex(array, value);
if (index < length &&
(value === value ? (value === array[index]) : (array[index] !== array[index]))) {
return index;
}
return -1;
}
return baseIndexOf(array, value, fromIndex || 0);
}
|
|
Gets all but the last element of static
memberOf
category
Array
Params
array
Array
The array to query.
Returns
Array
Returns the slice of
array.
example
.initial([1,
2, 3]);
// => [1, 2]
|
function initial(array) {
return dropRight(array, 1);
}
|
|
Creates an array of unique values that are included in all of the provided
arrays using static
memberOf
category
Array
Params
[arrays]
...Array
The arrays to inspect.
Returns
Array
Returns the new array of shared values.
example
.intersection([1,
2], [4, 2], [2, 1]);
// => [2]
|
var intersection = restParam(function(arrays) {
var othLength = arrays.length,
othIndex = othLength,
caches = Array(length),
indexOf = getIndexOf(),
isCommon = indexOf == baseIndexOf,
result = [];
while (othIndex--) {
var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : [];
caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null;
}
var array = arrays[0],
index = -1,
length = array ? array.length : 0,
seen = caches[0];
outer:
while (++index < length) {
value = array[index];
if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) {
var othIndex = othLength;
while (--othIndex) {
var cache = caches[othIndex];
if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) {
continue outer;
}
}
if (seen) {
seen.push(value);
}
result.push(value);
}
}
return result;
});
|
|
Gets the last element of static
memberOf
category
Array
Params
array
Array
The array to query.
Returns
*
Returns the last element of
array.
example
.last([1,
2, 3]);
// => 3
|
function last(array) {
var length = array ? array.length : 0;
return length ? array[length - 1] : undefined;
}
|
|
This method is like static
memberOf
category
Array
Params
array
Array
The array to search.
value
*
The value to search for.
[fromIndex=array.length-1]
boolean
number
The index to search from
or
true to perform a binary search on a sorted array.
Returns
number
Returns the index of the matched value, else
-1.
example
.lastIndexOf([1,
2, 1, 2], 2);
// => 3
// using
fromIndex
.lastIndexOf([1, 2, 1, 2], 2, 2);
// => 1
// performing a binary search
_.lastIndexOf([1, 1, 2, 2], 2, true);
// => 3
|
function lastIndexOf(array, value, fromIndex) {
var length = array ? array.length : 0;
if (!length) {
return -1;
}
var index = length;
if (typeof fromIndex == 'number') {
index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1;
} else if (fromIndex) {
index = binaryIndex(array, value, true) - 1;
var other = array[index];
if (value === value ? (value === other) : (other !== other)) {
return index;
}
return -1;
}
if (value !== value) {
return indexOfNaN(array, index, true);
}
while (index--) {
if (array[index] === value) {
return index;
}
}
return -1;
}
|
|
Removes all provided values from Note: Unlike static
memberOf
category
Array
Params
array
Array
The array to modify.
[values]
...*
The values to remove.
Returns
Array
Returns
array.
example
var
array = [1, 2, 3, 1, 2, 3];
_.pull(array, 2, 3);
console.log(array);
// => [1, 1]
|
function pull() {
var args = arguments,
array = args[0];
if (!(array && array.length)) {
return array;
}
var index = 0,
indexOf = getIndexOf(),
length = args.length;
while (++index < length) {
var fromIndex = 0,
value = args[index];
while ((fromIndex = indexOf(array, value, fromIndex)) > -1) {
splice.call(array, fromIndex, 1);
}
}
return array;
}
|
|
Removes elements from Note: Unlike static
memberOf
category
Array
Params
array
Array
The array to modify.
[indexes]
...(number
number[])
The indexes of elements to remove,
specified as individual indexes or arrays of indexes.
Returns
Array
Returns the new array of removed elements.
example
var
array = [5, 10, 15, 20];
var evens = _.pullAt(array, 1, 3);
console.log(array);
// => [5, 15]
console.log(evens);
// => [10, 20]
|
var pullAt = restParam(function(array, indexes) {
indexes = baseFlatten(indexes);
var result = baseAt(array, indexes);
basePullAt(array, indexes.sort(baseCompareAscending));
return result;
});
|
|
Removes all elements from If a property name is provided for If a value is also provided for If an object is provided for Note: Unlike static
memberOf
category
Array
Params
array
Array
The array to modify.
[predicate=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of predicate.
Returns
Array
Returns the new array of removed elements.
example
var
array = [1, 2, 3, 4];
var evens = _.remove(array, function(n) {
return n % 2 == 0;
});
console.log(array);
// => [1, 3]
console.log(evens);
// => [2, 4]
|
function remove(array, predicate, thisArg) {
var result = [];
if (!(array && array.length)) {
return result;
}
var index = -1,
indexes = [],
length = array.length;
predicate = getCallback(predicate, thisArg, 3);
while (++index < length) {
var value = array[index];
if (predicate(value, index, array)) {
result.push(value);
indexes.push(index);
}
}
basePullAt(array, indexes);
return result;
}
|
|
Gets all but the first element of static
memberOf
alias
tail
category
Array
Params
array
Array
The array to query.
Returns
Array
Returns the slice of
array.
example
.rest([1,
2, 3]);
// => [2, 3]
|
function rest(array) {
return drop(array, 1);
}
|
|
Creates a slice of Note: This method is used instead of static
memberOf
_
category
Array
Params
array
Array
The array to slice.
[start=0]
number
The start position.
[end=array.length]
number
The end position.
Returns
Array
Returns the slice of
array.
|
function slice(array, start, end) {
var length = array ? array.length : 0;
if (!length) {
return [];
}
if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
start = 0;
end = length;
}
return baseSlice(array, start, end);
}
|
|
Uses a binary search to determine the lowest index at which If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
category
Array
Params
array
Array
The sorted array to inspect.
value
The value to evaluate.
[iteratee=_.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
The
this binding of iteratee.
Returns
number
Returns the index at which
value should be inserted
into array.
example
.sortedIndex([30,
50], 40);
// => 1
.sortedIndex([4, 4, 5, 5], 5);
// => 2
var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } };
// using an iteratee function
.sortedIndex(['thirty', 'fifty'], 'forty', function(word) {
return this.data[word];
}, dict);
// => 1
// using the
.property callback shorthand
_.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
// => 1
|
var sortedIndex = createSortedIndex();
|
|
This method is like static
memberOf
category
Array
Params
array
Array
The sorted array to inspect.
value
The value to evaluate.
[iteratee=_.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
The
this binding of iteratee.
Returns
number
Returns the index at which
value should be inserted
into array.
example
_.sortedLastIndex([4,
4, 5, 5], 5);
// => 4
|
var sortedLastIndex = createSortedIndex(true);
|
|
Creates a slice of static
memberOf
category
Array
Params
array
Array
The array to query.
[n=1]
number
The number of elements to take.
param-
Object
[guard] Enables use as a callback for functions like
.map.
Returns
Array
Returns the slice of
array.
example
.take([1,
2, 3]);
// => [1]
.take([1, 2, 3], 2);
// => [1, 2]
.take([1, 2, 3], 5);
// => [1, 2, 3]
.take([1, 2, 3], 0);
// => []
|
function take(array, n, guard) {
var length = array ? array.length : 0;
if (!length) {
return [];
}
if (guard ? isIterateeCall(array, n, guard) : n == null) {
n = 1;
}
return baseSlice(array, 0, n < 0 ? 0 : n);
}
|
|
Creates a slice of static
memberOf
category
Array
Params
array
Array
The array to query.
[n=1]
number
The number of elements to take.
param-
Object
[guard] Enables use as a callback for functions like
.map.
Returns
Array
Returns the slice of
array.
example
.takeRight([1,
2, 3]);
// => [3]
.takeRight([1, 2, 3], 2);
// => [2, 3]
.takeRight([1, 2, 3], 5);
// => [1, 2, 3]
.takeRight([1, 2, 3], 0);
// => []
|
function takeRight(array, n, guard) {
var length = array ? array.length : 0;
if (!length) {
return [];
}
if (guard ? isIterateeCall(array, n, guard) : n == null) {
n = 1;
}
n = length - (+n || 0);
return baseSlice(array, n < 0 ? 0 : n);
}
|
|
Creates a slice of If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
category
Array
Params
array
Array
The array to query.
[predicate=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of predicate.
Returns
Array
Returns the slice of
array.
example
.takeRightWhile([1,
2, 3], function(n) {
return n > 1;
});
// => [2, 3]
var users = [
{ 'user': 'barney', 'active': true },
{ 'user': 'fred', 'active': false },
{ 'user': 'pebbles', 'active': false }
];
// using the
.matches callback shorthand
.pluck(.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');
// => ['pebbles']
// using the .matchesProperty callback shorthand
.pluck(.takeRightWhile(users, 'active', false), 'user');
// => ['fred', 'pebbles']
// using the _.property callback shorthand
.pluck(.takeRightWhile(users, 'active'), 'user');
// => []
|
function takeRightWhile(array, predicate, thisArg) {
return (array && array.length)
? baseWhile(array, getCallback(predicate, thisArg, 3), false, true)
: [];
}
|
|
Creates a slice of If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
category
Array
Params
array
Array
The array to query.
[predicate=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of predicate.
Returns
Array
Returns the slice of
array.
example
.takeWhile([1,
2, 3], function(n) {
return n < 3;
});
// => [1, 2]
var users = [
{ 'user': 'barney', 'active': false },
{ 'user': 'fred', 'active': false},
{ 'user': 'pebbles', 'active': true }
];
// using the
.matches callback shorthand
.pluck(.takeWhile(users, { 'user': 'barney', 'active': false }), 'user');
// => ['barney']
// using the .matchesProperty callback shorthand
.pluck(.takeWhile(users, 'active', false), 'user');
// => ['barney', 'fred']
// using the _.property callback shorthand
.pluck(.takeWhile(users, 'active'), 'user');
// => []
|
function takeWhile(array, predicate, thisArg) {
return (array && array.length)
? baseWhile(array, getCallback(predicate, thisArg, 3))
: [];
}
|
|
Creates an array of unique values, in order, from all of the provided arrays
using static
memberOf
category
Array
Params
[arrays]
...Array
The arrays to inspect.
Returns
Array
Returns the new array of combined values.
example
.union([1,
2], [4, 2], [2, 1]);
// => [1, 2, 4]
|
var union = restParam(function(arrays) {
return baseUniq(baseFlatten(arrays, false, true));
});
|
|
Creates a duplicate-free version of an array, using
If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
alias
unique
category
Array
Params
array
Array
The array to inspect.
[isSorted]
boolean
Specify the array is sorted.
[iteratee]
Function
Object
string
The function invoked per iteration.
[thisArg]
*
The
this binding of iteratee.
Returns
Array
Returns the new duplicate-value-free array.
example
.uniq([2,
1, 2]);
// => [2, 1]
// using
isSorted
.uniq([1, 1, 2], true);
// => [1, 2]
// using an iteratee function
.uniq([1, 2.5, 1.5, 2], function(n) {
return this.floor(n);
}, Math);
// => [1, 2.5]
// using the .property callback shorthand
_.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
// => [{ 'x': 1 }, { 'x': 2 }]
|
function uniq(array, isSorted, iteratee, thisArg) {
var length = array ? array.length : 0;
if (!length) {
return [];
}
if (isSorted != null && typeof isSorted != 'boolean') {
thisArg = iteratee;
iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted;
isSorted = false;
}
var callback = getCallback();
if (!(iteratee == null && callback === baseCallback)) {
iteratee = callback(iteratee, thisArg, 3);
}
return (isSorted && getIndexOf() == baseIndexOf)
? sortedUniq(array, iteratee)
: baseUniq(array, iteratee);
}
|
|
This method is like static
memberOf
category
Array
Params
array
Array
The array of grouped elements to process.
Returns
Array
Returns the new array of regrouped elements.
example
var
zipped = .zip(['fred', 'barney'], [30, 40], [true, false]);
// => [['fred', 30, true], ['barney', 40, false]]
.unzip(zipped);
// => [['fred', 'barney'], [30, 40], [true, false]]
|
function unzip(array) {
if (!(array && array.length)) {
return [];
}
var index = -1,
length = 0;
array = arrayFilter(array, function(group) {
if (isArrayLike(group)) {
length = nativeMax(group.length, length);
return true;
}
});
var result = Array(length);
while (++index < length) {
result[index] = arrayMap(array, baseProperty(index));
}
return result;
}
|
|
This method is like static
memberOf
category
Array
Params
array
Array
The array of grouped elements to process.
[iteratee]
Function
The function to combine regrouped values.
[thisArg]
*
The
this binding of iteratee.
Returns
Array
Returns the new array of regrouped elements.
example
var
zipped = _.zip([1, 2], [10, 20], [100, 200]);
// => [[1, 10, 100], [2, 20, 200]]
.unzipWith(zipped, .add);
// => [3, 30, 300]
|
function unzipWith(array, iteratee, thisArg) {
var length = array ? array.length : 0;
if (!length) {
return [];
}
var result = unzip(array);
if (iteratee == null) {
return result;
}
iteratee = bindCallback(iteratee, thisArg, 4);
return arrayMap(result, function(group) {
return arrayReduce(group, iteratee, undefined, true);
});
}
|
|
Creates an array excluding all provided values using
static
memberOf
category
Array
Params
array
Array
The array to filter.
[values]
...*
The values to exclude.
Returns
Array
Returns the new array of filtered values.
example
.without([1,
2, 1, 3], 1, 2);
// => [3]
|
var without = restParam(function(array, values) {
return isArrayLike(array)
? baseDifference(array, values)
: [];
});
|
|
Creates an array of unique values that is the symmetric difference of the provided arrays. static
memberOf
category
Array
Params
[arrays]
...Array
The arrays to inspect.
Returns
Array
Returns the new array of values.
example
.xor([1,
2], [4, 2]);
// => [1, 4]
|
function xor() {
var index = -1,
length = arguments.length;
while (++index < length) {
var array = arguments[index];
if (isArrayLike(array)) {
var result = result
? arrayPush(baseDifference(result, array), baseDifference(array, result))
: array;
}
}
return result ? baseUniq(result) : [];
}
|
|
Creates an array of grouped elements, the first of which contains the first elements of the given arrays, the second of which contains the second elements of the given arrays, and so on. static
memberOf
category
Array
Params
[arrays]
...Array
The arrays to process.
Returns
Array
Returns the new array of grouped elements.
example
.zip(['fred',
'barney'], [30, 40], [true, false]);
// => [['fred', 30, true], ['barney', 40, false]]
|
var zip = restParam(unzip);
|
|
The inverse of static
memberOf
alias
object
category
Array
Params
props
Array
The property names.
[values=[]]
Array
The property values.
Returns
Object
Returns the new object.
example
.zipObject([['fred',
30], ['barney', 40]]);
// => { 'fred': 30, 'barney': 40 }
.zipObject(['fred', 'barney'], [30, 40]);
// => { 'fred': 30, 'barney': 40 }
|
function zipObject(props, values) {
var index = -1,
length = props ? props.length : 0,
result = {};
if (length && !values && !isArray(props[0])) {
values = [];
}
while (++index < length) {
var key = props[index];
if (values) {
result[key] = values[index];
} else if (key) {
result[key[0]] = key[1];
}
}
return result;
}
|
|
This method is like static
memberOf
category
Array
Params
[arrays]
...Array
The arrays to process.
[iteratee]
Function
The function to combine grouped values.
[thisArg]
*
The
this binding of iteratee.
Returns
Array
Returns the new array of grouped elements.
example
.zipWith([1,
2], [10, 20], [100, 200], .add);
// => [111, 222]
|
var zipWith = restParam(function(arrays) {
var length = arrays.length,
iteratee = length > 2 ? arrays[length - 2] : undefined,
thisArg = length > 1 ? arrays[length - 1] : undefined;
if (length > 2 && typeof iteratee == 'function') {
length -= 2;
} else {
iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined;
thisArg = undefined;
}
arrays.length = length;
return unzipWith(arrays, iteratee, thisArg);
});
/*------------------------------------------------------------------------*/
|
|
Creates a static
memberOf
category
Chain
Params
value
*
The value to wrap.
Returns
Object
Returns the new
lodash wrapper instance.
example
var
users = [
{ 'user': 'barney', 'age': 36 },
{ 'user': 'fred', 'age': 40 },
{ 'user': 'pebbles', 'age': 1 }
];
var youngest = .chain(users)
.sortBy('age')
.map(function(chr) {
return chr.user + ' is ' + chr.age;
})
.first()
.value();
// => 'pebbles is 1'
|
function chain(value) {
var result = lodash(value);
result.__chain__ = true;
return result;
}
|
|
This method invokes static
memberOf
category
Chain
Params
value
The value to provide to
interceptor.
interceptor
Function
The function to invoke.
[thisArg]
The
this binding of interceptor.
Returns
*
Returns
value.
example
([1,
2, 3])
.tap(function(array) {
array.pop();
})
.reverse()
.value();
// => [2, 1]
|
function tap(value, interceptor, thisArg) {
interceptor.call(thisArg, value);
return value;
}
|
|
This method is like static
memberOf
category
Chain
Params
value
The value to provide to
interceptor.
interceptor
Function
The function to invoke.
[thisArg]
The
this binding of interceptor.
Returns
*
Returns the result of
interceptor.
example
_('
abc ')
.chain()
.trim()
.thru(function(value) {
return [value];
})
.value();
// => ['abc']
|
function thru(value, interceptor, thisArg) {
return interceptor.call(thisArg, value);
}
|
|
Enables explicit method chaining on the wrapper object. name
chain
memberOf
category
Chain
Returns
Object
Returns the new
lodash wrapper instance.
example
var
users = [
{ 'user': 'barney', 'age': 36 },
{ 'user': 'fred', 'age': 40 }
];
// without explicit chaining
(users).first();
// => { 'user': 'barney', 'age': 36 }
// with explicit chaining
_(users).chain()
.first()
.pick('user')
.value();
// => { 'user': 'barney' }
|
function wrapperChain() {
return chain(this);
}
|
|
Executes the chained sequence and returns the wrapped result. name
commit
memberOf
category
Chain
Returns
Object
Returns the new
lodash wrapper instance.
example
var
array = [1, 2];
var wrapped = (array).push(3);
console.log(array);
// => [1, 2]
wrapped = wrapped.commit();
console.log(array);
// => [1, 2, 3]
wrapped.last();
// => 3
console.log(array);
// => [1, 2, 3]
|
function wrapperCommit() {
return new LodashWrapper(this.value(), this.__chain__);
}
|
|
Creates a new array joining a wrapped array with any additional arrays and/or values. name
concat
memberOf
category
Chain
Params
[values]
...*
The values to concatenate.
Returns
Array
Returns the new concatenated array.
example
var
array = [1];
var wrapped = (array).concat(2, [3], [[4]]);
console.log(wrapped.value());
// => [1, 2, 3, [4]]
console.log(array);
// => [1]
|
var wrapperConcat = restParam(function(values) {
values = baseFlatten(values);
return this.thru(function(array) {
return arrayConcat(isArray(array) ? array : [toObject(array)], values);
});
});
|
|
Creates a clone of the chained sequence planting name
plant
memberOf
category
Chain
Returns
Object
Returns the new
lodash wrapper instance.
example
var
array = [1, 2];
var wrapped = (array).map(function(value) {
return Math.pow(value, 2);
});
var other = [3, 4];
var otherWrapped = wrapped.plant(other);
otherWrapped.value();
// => [9, 16]
wrapped.value();
// => [1, 4]
|
function wrapperPlant(value) {
var result,
parent = this;
while (parent instanceof baseLodash) {
var clone = wrapperClone(parent);
if (result) {
previous.__wrapped__ = clone;
} else {
result = clone;
}
var previous = clone;
parent = parent.__wrapped__;
}
previous.__wrapped__ = value;
return result;
}
|
|
Reverses the wrapped array so the first element becomes the last, the second element becomes the second to last, and so on. Note: This method mutates the wrapped array. name
reverse
memberOf
category
Chain
Returns
Object
Returns the new reversed
lodash wrapper instance.
example
var
array = [1, 2, 3];
(array).reverse().value()
// => [3, 2, 1]
console.log(array);
// => [3, 2, 1]
|
function wrapperReverse() {
var value = this.__wrapped__;
var interceptor = function(value) {
return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse();
};
if (value instanceof LazyWrapper) {
var wrapped = value;
if (this.__actions__.length) {
wrapped = new LazyWrapper(this);
}
wrapped = wrapped.reverse();
wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
return new LodashWrapper(wrapped, this.__chain__);
}
return this.thru(interceptor);
}
|
|
Produces the result of coercing the unwrapped value to a string. name
toString
memberOf
category
Chain
Returns
string
Returns the coerced string value.
example
([1,
2, 3]).toString();
// => '1,2,3'
|
function wrapperToString() {
return (this.value() + '');
}
|
|
Executes the chained sequence to extract the unwrapped value. name
value
memberOf
alias
run, toJSON, valueOf
category
Chain
Returns
*
Returns the resolved unwrapped value.
example
([1,
2, 3]).value();
// => [1, 2, 3]
|
function wrapperValue() {
return baseWrapperValue(this.__wrapped__, this.__actions__);
}
/*------------------------------------------------------------------------*/
|
|
Creates an array of elements corresponding to the given keys, or indexes,
of static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
[props]
...(number
number[]
string
string[])
The property names
or indexes of elements to pick, specified individually or in arrays.
Returns
Array
Returns the new array of picked elements.
example
.at(['a',
'b', 'c'], [0, 2]);
// => ['a', 'c']
_.at(['barney', 'fred', 'pebbles'], 0, 2);
// => ['barney', 'pebbles']
|
var at = restParam(function(collection, props) {
return baseAt(collection, baseFlatten(props));
});
|
|
Creates an object composed of keys generated from the results of running
each element of If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
[iteratee=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of iteratee.
Returns
Object
Returns the composed aggregate object.
example
.countBy([4.3,
6.1, 6.4], function(n) {
return Math.floor(n);
});
// => { '4': 1, '6': 2 }
.countBy([4.3, 6.1, 6.4], function(n) {
return this.floor(n);
}, Math);
// => { '4': 1, '6': 2 }
.countBy(['one', 'two', 'three'], 'length');
// => { '3': 2, '5': 1 }
|
var countBy = createAggregator(function(result, value, key) {
hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1);
});
|
|
Checks if If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
alias
all
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
[predicate=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of predicate.
Returns
boolean
Returns
true if all elements pass the predicate check,
else false.
example
.every([true,
1, null, 'yes'], Boolean);
// => false
var users = [
{ 'user': 'barney', 'active': false },
{ 'user': 'fred', 'active': false }
];
// using the
.matches callback shorthand
.every(users, { 'user': 'barney', 'active': false });
// => false
// using the .matchesProperty callback shorthand
.every(users, 'active', false);
// => true
// using the .property callback shorthand
.every(users, 'active');
// => false
|
function every(collection, predicate, thisArg) {
var func = isArray(collection) ? arrayEvery : baseEvery;
if (thisArg && isIterateeCall(collection, predicate, thisArg)) {
predicate = undefined;
}
if (typeof predicate != 'function' || thisArg !== undefined) {
predicate = getCallback(predicate, thisArg, 3);
}
return func(collection, predicate);
}
|
|
Iterates over elements of If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
alias
select
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
[predicate=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of predicate.
Returns
Array
Returns the new filtered array.
example
.filter([4,
5, 6], function(n) {
return n % 2 == 0;
});
// => [4, 6]
var users = [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false }
];
// using the
.matches callback shorthand
.pluck(.filter(users, { 'age': 36, 'active': true }), 'user');
// => ['barney']
// using the .matchesProperty callback shorthand
.pluck(.filter(users, 'active', false), 'user');
// => ['fred']
// using the _.property callback shorthand
.pluck(.filter(users, 'active'), 'user');
// => ['barney']
|
function filter(collection, predicate, thisArg) {
var func = isArray(collection) ? arrayFilter : baseFilter;
predicate = getCallback(predicate, thisArg, 3);
return func(collection, predicate);
}
|
|
Iterates over elements of If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
alias
detect
category
Collection
Params
collection
Array
Object
string
The collection to search.
[predicate=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
The
this binding of predicate.
Returns
Returns the matched element, else
undefined.
example
var
users = [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false },
{ 'user': 'pebbles', 'age': 1, 'active': true }
];
.result(.find(users, function(chr) {
return chr.age < 40;
}), 'user');
// => 'barney'
// using the
.matches callback shorthand
.result(.find(users, { 'age': 1, 'active': true }), 'user');
// => 'pebbles'
// using the .matchesProperty callback shorthand
.result(.find(users, 'active', false), 'user');
// => 'fred'
// using the .property callback shorthand
.result(.find(users, 'active'), 'user');
// => 'barney'
|
var find = createFind(baseEach);
|
|
This method is like static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to search.
[predicate=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
The
this binding of predicate.
Returns
Returns the matched element, else
undefined.
example
.findLast([1,
2, 3, 4], function(n) {
return n % 2 == 1;
});
// => 3
|
var findLast = createFind(baseEachRight, true);
|
|
Performs a deep comparison between each element in Note: This method supports comparing arrays, booleans, static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to search.
source
Object
The object of property values to match.
Returns
*
Returns the matched element, else
undefined.
example
var
users = [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false }
];
.result(.findWhere(users, { 'age': 36, 'active': true }), 'user');
// => 'barney'
.result(.findWhere(users, { 'age': 40, 'active': false }), 'user');
// => 'fred'
|
function findWhere(collection, source) {
return find(collection, baseMatches(source));
}
|
|
Iterates over elements of Note: As with other "Collections" methods, objects with a "length" property
are iterated like arrays. To avoid this behavior static
memberOf
alias
each
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
[iteratee=.identity]
Function
The function invoked per iteration.
[thisArg]
*
The
this binding of iteratee.
Returns
Array
Object
string
Returns
collection.
example
([1,
2]).forEach(function(n) {
console.log(n);
}).value();
// => logs each value from left to right and returns the array
.forEach({ 'a': 1, 'b': 2 }, function(n, key) {
console.log(n, key);
});
// => logs each value-key pair and returns the object (iteration order is not guaranteed)
|
var forEach = createForEach(arrayEach, baseEach);
|
|
This method is like static
memberOf
alias
eachRight
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
[iteratee=.identity]
Function
The function invoked per iteration.
[thisArg]
*
The
this binding of iteratee.
Returns
Array
Object
string
Returns
collection.
example
([1,
2]).forEachRight(function(n) {
console.log(n);
}).value();
// => logs each value from right to left and returns the array
|
var forEachRight = createForEach(arrayEachRight, baseEachRight);
|
|
Creates an object composed of keys generated from the results of running
each element of If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
[iteratee=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of iteratee.
Returns
Object
Returns the composed aggregate object.
example
.groupBy([4.2,
6.1, 6.4], function(n) {
return Math.floor(n);
});
// => { '4': [4.2], '6': [6.1, 6.4] }
.groupBy([4.2, 6.1, 6.4], function(n) {
return this.floor(n);
}, Math);
// => { '4': [4.2], '6': [6.1, 6.4] }
// using the
.property callback shorthand
_.groupBy(['one', 'two', 'three'], 'length');
// => { '3': ['one', 'two'], '5': ['three'] }
|
var groupBy = createAggregator(function(result, value, key) {
if (hasOwnProperty.call(result, key)) {
result[key].push(value);
} else {
result[key] = [value];
}
});
|
|
Checks if static
memberOf
alias
contains, include
category
Collection
Params
collection
Array
Object
string
The collection to search.
target
*
The value to search for.
[fromIndex=0]
number
The index to search from.
param-
Object
[guard] Enables use as a callback for functions like
.reduce.
Returns
boolean
Returns
true if a matching element is found, else false.
example
.includes([1,
2, 3], 1);
// => true
.includes([1, 2, 3], 1, 2);
// => false
.includes({ 'user': 'fred', 'age': 40 }, 'fred');
// => true
.includes('pebbles', 'eb');
// => true
|
function includes(collection, target, fromIndex, guard) {
var length = collection ? getLength(collection) : 0;
if (!isLength(length)) {
collection = values(collection);
length = collection.length;
}
if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {
fromIndex = 0;
} else {
fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);
}
return (typeof collection == 'string' || !isArray(collection) && isString(collection))
? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1)
: (!!length && getIndexOf(collection, target, fromIndex) > -1);
}
|
|
Creates an object composed of keys generated from the results of running
each element of If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
[iteratee=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of iteratee.
Returns
Object
Returns the composed aggregate object.
example
var
keyData = [
{ 'dir': 'left', 'code': 97 },
{ 'dir': 'right', 'code': 100 }
];
.indexBy(keyData, 'dir');
// => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
.indexBy(keyData, function(object) {
return String.fromCharCode(object.code);
});
// => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
.indexBy(keyData, function(object) {
return this.fromCharCode(object.code);
}, String);
// => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
|
var indexBy = createAggregator(function(result, value, key) {
result[key] = value;
});
|
|
Invokes the method at static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
path
Array
Function
string
The path of the method to invoke or
the function invoked per iteration.
[args]
...*
The arguments to invoke the method with.
Returns
Array
Returns the array of results.
example
.invoke([[5,
1, 7], [3, 2, 1]], 'sort');
// => [[1, 5, 7], [1, 2, 3]]
_.invoke([123, 456], String.prototype.split, '');
// => [['1', '2', '3'], ['4', '5', '6']]
|
var invoke = restParam(function(collection, path, args) {
var index = -1,
isFunc = typeof path == 'function',
isProp = isKey(path),
result = isArrayLike(collection) ? Array(collection.length) : [];
baseEach(collection, function(value) {
var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined);
result[++index] = func ? func.apply(value, args) : invokePath(value, path, args);
});
return result;
});
|
|
Creates an array of values by running each element in If a property name is provided for If a value is also provided for If an object is provided for Many lodash methods are guarded to work as iteratees for methods like
The guarded methods are:
static
memberOf
alias
collect
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
[iteratee=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
The
this binding of iteratee.
Returns
Array
Returns the new mapped array.
example
function
timesThree(n) {
return n 3;
}
.map([1, 2], timesThree);
// => [3, 6]
.map({ 'a': 1, 'b': 2 }, timesThree);
// => [3, 6] (iteration order is not guaranteed)
var users = [
{ 'user': 'barney' },
{ 'user': 'fred' }
];
// using the
.property callback shorthand
_.map(users, 'user');
// => ['barney', 'fred']
|
function map(collection, iteratee, thisArg) {
var func = isArray(collection) ? arrayMap : baseMap;
iteratee = getCallback(iteratee, thisArg, 3);
return func(collection, iteratee);
}
|
|
Creates an array of elements split into two groups, the first of which
contains elements If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
[predicate=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of predicate.
Returns
Array
Returns the array of grouped elements.
example
.partition([1,
2, 3], function(n) {
return n % 2;
});
// => [[1, 3], [2]]
.partition([1.2, 2.3, 3.4], function(n) {
return this.floor(n) % 2;
}, Math);
// => [[1.2, 3.4], [2.3]]
var users = [
{ 'user': 'barney', 'age': 36, 'active': false },
{ 'user': 'fred', 'age': 40, 'active': true },
{ 'user': 'pebbles', 'age': 1, 'active': false }
];
var mapper = function(array) {
return .pluck(array, 'user');
};
// using the
.matches callback shorthand
.map(.partition(users, { 'age': 1, 'active': false }), mapper);
// => [['pebbles'], ['barney', 'fred']]
// using the .matchesProperty callback shorthand
.map(.partition(users, 'active', false), mapper);
// => [['barney', 'pebbles'], ['fred']]
// using the _.property callback shorthand
.map(.partition(users, 'active'), mapper);
// => [['fred'], ['barney', 'pebbles']]
|
var partition = createAggregator(function(result, value, key) {
result[key ? 0 : 1].push(value);
}, function() { return [[], []]; });
|
|
Gets the property value of static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
path
Array
string
The path of the property to pluck.
Returns
Array
Returns the property values.
example
var
users = [
{ 'user': 'barney', 'age': 36 },
{ 'user': 'fred', 'age': 40 }
];
.pluck(users, 'user');
// => ['barney', 'fred']
var userIndex = .indexBy(users, 'user');
.pluck(userIndex, 'age');
// => [36, 40] (iteration order is not guaranteed)
|
function pluck(collection, path) {
return map(collection, property(path));
}
|
|
Reduces Many lodash methods are guarded to work as iteratees for methods like
The guarded methods are:
static
memberOf
alias
foldl, inject
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
[iteratee=.identity]
Function
The function invoked per iteration.
[accumulator]
The initial value.
[thisArg]
The
this binding of iteratee.
Returns
*
Returns the accumulated value.
example
.reduce([1,
2], function(total, n) {
return total + n;
});
// => 3
_.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) {
result[key] = n * 3;
return result;
}, {});
// => { 'a': 3, 'b': 6 } (iteration order is not guaranteed)
|
var reduce = createReduce(arrayReduce, baseEach);
|
|
This method is like static
memberOf
alias
foldr
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
[iteratee=.identity]
Function
The function invoked per iteration.
[accumulator]
The initial value.
[thisArg]
The
this binding of iteratee.
Returns
*
Returns the accumulated value.
example
var
array = [[0, 1], [2, 3], [4, 5]];
.reduceRight(array, function(flattened, other) {
return flattened.concat(other);
}, []);
// => [4, 5, 2, 3, 0, 1]
|
var reduceRight = createReduce(arrayReduceRight, baseEachRight);
|
|
The opposite of static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
[predicate=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of predicate.
Returns
Array
Returns the new filtered array.
example
.reject([1,
2, 3, 4], function(n) {
return n % 2 == 0;
});
// => [1, 3]
var users = [
{ 'user': 'barney', 'age': 36, 'active': false },
{ 'user': 'fred', 'age': 40, 'active': true }
];
// using the
.matches callback shorthand
.pluck(.reject(users, { 'age': 40, 'active': true }), 'user');
// => ['barney']
// using the .matchesProperty callback shorthand
.pluck(.reject(users, 'active', false), 'user');
// => ['fred']
// using the _.property callback shorthand
.pluck(.reject(users, 'active'), 'user');
// => ['barney']
|
function reject(collection, predicate, thisArg) {
var func = isArray(collection) ? arrayFilter : baseFilter;
predicate = getCallback(predicate, thisArg, 3);
return func(collection, function(value, index, collection) {
return !predicate(value, index, collection);
});
}
|
|
Gets a random element or static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to sample.
[n]
number
The number of elements to sample.
param-
Object
[guard] Enables use as a callback for functions like
.map.
Returns
*
Returns the random sample(s).
example
.sample([1,
2, 3, 4]);
// => 2
.sample([1, 2, 3, 4], 2);
// => [3, 1]
|
function sample(collection, n, guard) {
if (guard ? isIterateeCall(collection, n, guard) : n == null) {
collection = toIterable(collection);
var length = collection.length;
return length > 0 ? collection[baseRandom(0, length - 1)] : undefined;
}
var index = -1,
result = toArray(collection),
length = result.length,
lastIndex = length - 1;
n = nativeMin(n < 0 ? 0 : (+n || 0), length);
while (++index < n) {
var rand = baseRandom(index, lastIndex),
value = result[rand];
result[rand] = result[index];
result[index] = value;
}
result.length = n;
return result;
}
|
|
Creates an array of shuffled values, using a version of the Fisher-Yates shuffle. static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to shuffle.
Returns
Array
Returns the new shuffled array.
example
.shuffle([1,
2, 3, 4]);
// => [4, 1, 3, 2]
|
function shuffle(collection) {
return sample(collection, POSITIVE_INFINITY);
}
|
|
Gets the size of static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to inspect.
Returns
number
Returns the size of
collection.
example
.size([1,
2, 3]);
// => 3
.size({ 'a': 1, 'b': 2 });
// => 2
.size('pebbles');
// => 7
|
function size(collection) {
var length = collection ? getLength(collection) : 0;
return isLength(length) ? length : keys(collection).length;
}
|
|
Checks if If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
alias
any
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
[predicate=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of predicate.
Returns
boolean
Returns
true if any element passes the predicate check,
else false.
example
.some([null,
0, 'yes', false], Boolean);
// => true
var users = [
{ 'user': 'barney', 'active': true },
{ 'user': 'fred', 'active': false }
];
// using the
.matches callback shorthand
.some(users, { 'user': 'barney', 'active': false });
// => false
// using the .matchesProperty callback shorthand
.some(users, 'active', false);
// => true
// using the .property callback shorthand
.some(users, 'active');
// => true
|
function some(collection, predicate, thisArg) {
var func = isArray(collection) ? arraySome : baseSome;
if (thisArg && isIterateeCall(collection, predicate, thisArg)) {
predicate = undefined;
}
if (typeof predicate != 'function' || thisArg !== undefined) {
predicate = getCallback(predicate, thisArg, 3);
}
return func(collection, predicate);
}
|
|
Creates an array of elements, sorted in ascending order by the results of
running each element in a collection through If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
[iteratee=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of iteratee.
Returns
Array
Returns the new sorted array.
example
.sortBy([1,
2, 3], function(n) {
return Math.sin(n);
});
// => [3, 1, 2]
.sortBy([1, 2, 3], function(n) {
return this.sin(n);
}, Math);
// => [3, 1, 2]
var users = [
{ 'user': 'fred' },
{ 'user': 'pebbles' },
{ 'user': 'barney' }
];
// using the
.property callback shorthand
.pluck(.sortBy(users, 'user'), 'user');
// => ['barney', 'fred', 'pebbles']
|
function sortBy(collection, iteratee, thisArg) {
if (collection == null) {
return [];
}
if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
iteratee = undefined;
}
var index = -1;
iteratee = getCallback(iteratee, thisArg, 3);
var result = baseMap(collection, function(value, key, collection) {
return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value };
});
return baseSortBy(result, compareAscending);
}
|
|
This method is like If a property name is provided for an iteratee the created If an object is provided for an iteratee the created static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
iteratees
...(Function
Function[]
Object
Object[]
string
string[])
The iteratees to sort by, specified as individual values or arrays of values.
Returns
Array
Returns the new sorted array.
example
var
users = [
{ 'user': 'fred', 'age': 48 },
{ 'user': 'barney', 'age': 36 },
{ 'user': 'fred', 'age': 42 },
{ 'user': 'barney', 'age': 34 }
];
.map(.sortByAll(users, ['user', 'age']), .values);
// => [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]]
.map(.sortByAll(users, 'user', function(chr) {
return Math.floor(chr.age / 10);
}), .values);
// => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
|
var sortByAll = restParam(function(collection, iteratees) {
if (collection == null) {
return [];
}
var guard = iteratees[2];
if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) {
iteratees.length = 1;
}
return baseSortByOrder(collection, baseFlatten(iteratees), []);
});
|
|
This method is like If a property name is provided for an iteratee the created If an object is provided for an iteratee the created static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to iterate over.
iteratees
Function[]
Object[]
string[]
The iteratees to sort by.
[orders]
boolean[]
The sort orders of
iteratees.
param-
Object
[guard] Enables use as a callback for functions like
.reduce.
Returns
Array
Returns the new sorted array.
example
var
users = [
{ 'user': 'fred', 'age': 48 },
{ 'user': 'barney', 'age': 34 },
{ 'user': 'fred', 'age': 42 },
{ 'user': 'barney', 'age': 36 }
];
// sort by
user in ascending order and by age in descending order
.map(.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), .values);
// => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
|
function sortByOrder(collection, iteratees, orders, guard) {
if (collection == null) {
return [];
}
if (guard && isIterateeCall(iteratees, orders, guard)) {
orders = undefined;
}
if (!isArray(iteratees)) {
iteratees = iteratees == null ? [] : [iteratees];
}
if (!isArray(orders)) {
orders = orders == null ? [] : [orders];
}
return baseSortByOrder(collection, iteratees, orders);
}
|
|
Performs a deep comparison between each element in Note: This method supports comparing arrays, booleans, static
memberOf
category
Collection
Params
collection
Array
Object
string
The collection to search.
source
Object
The object of property values to match.
Returns
Array
Returns the new filtered array.
example
var
users = [
{ 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] },
{ 'user': 'fred', 'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] }
];
.pluck(.where(users, { 'age': 36, 'active': false }), 'user');
// => ['barney']
.pluck(.where(users, { 'pets': ['dino'] }), 'user');
// => ['fred']
|
function where(collection, source) {
return filter(collection, baseMatches(source));
}
/*------------------------------------------------------------------------*/
|
|
Gets the number of milliseconds that have elapsed since the Unix epoch (1 January 1970 00:00:00 UTC). static
memberOf
category
Date
example
.defer(function(stamp)
console.log(_.now()-stamp);
{
console.log(.now()-stamp);
}, .now());
// => logs the number of milliseconds it took for the deferred function to be invoked
|
var now = nativeNow || function() {
return new Date().getTime();
};
/*------------------------------------------------------------------------*/
|
|
The opposite of static
memberOf
category
Function
Params
n
number
The number of calls before
func is invoked.
func
Function
The function to restrict.
Returns
Function
Returns the new restricted function.
example
var
saves = ['profile', 'settings'];
var done = .after(saves.length, function() {
console.log('done saving!');
});
.forEach(saves, function(type) {
asyncSave({ 'type': type, 'complete': done });
});
// => logs 'done saving!' after the two async saves have completed
|
function after(n, func) {
if (typeof func != 'function') {
if (typeof n == 'function') {
var temp = n;
n = func;
func = temp;
} else {
throw new TypeError(FUNC_ERROR_TEXT);
}
}
n = nativeIsFinite(n = +n) ? n : 0;
return function() {
if (--n < 1) {
return func.apply(this, arguments);
}
};
}
|
|
Creates a function that accepts up to static
memberOf
category
Function
Params
func
Function
The function to cap arguments for.
[n=func.length]
number
The arity cap.
param-
Object
[guard] Enables use as a callback for functions like
.map.
Returns
Function
Returns the new function.
example
.map(['6',
'8', '10'], .ary(parseInt, 1));
// => [6, 8, 10]
|
function ary(func, n, guard) {
if (guard && isIterateeCall(func, n, guard)) {
n = undefined;
}
n = (func && n == null) ? func.length : nativeMax(+n || 0, 0);
return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);
}
|
|
Creates a function that invokes static
memberOf
category
Function
Params
n
number
The number of calls at which
func is no longer invoked.
func
Function
The function to restrict.
Returns
Function
Returns the new restricted function.
example
jQuery('#add').on('click',
.before(5, addContactToList));
// => allows adding up to 4 contacts to the list
|
function before(n, func) {
var result;
if (typeof func != 'function') {
if (typeof n == 'function') {
var temp = n;
n = func;
func = temp;
} else {
throw new TypeError(FUNC_ERROR_TEXT);
}
}
return function() {
if (--n > 0) {
result = func.apply(this, arguments);
}
if (n <= 1) {
func = undefined;
}
return result;
};
}
|
|
Creates a function that invokes The Note: Unlike native static
memberOf
category
Function
Params
func
Function
The function to bind.
thisArg
The
this binding of func.
[partials]
...
The arguments to be partially applied.
Returns
Function
Returns the new bound function.
example
var
greet = function(greeting, punctuation) {
return greeting + ' ' + this.user + punctuation;
};
var object = { 'user': 'fred' };
var bound = _.bind(greet, object, 'hi');
bound('!');
// => 'hi fred!'
// using placeholders
var bound = .bind(greet, object, , '!');
bound('hi');
// => 'hi fred!'
|
var bind = restParam(function(func, thisArg, partials) {
var bitmask = BIND_FLAG;
if (partials.length) {
var holders = replaceHolders(partials, bind.placeholder);
bitmask |= PARTIAL_FLAG;
}
return createWrapper(func, bitmask, thisArg, partials, holders);
});
|
|
Binds methods of an object to the object itself, overwriting the existing
method. Method names may be specified as individual arguments or as arrays
of method names. If no method names are provided all enumerable function
properties, own and inherited, of Note: This method does not set the "length" property of bound functions. static
memberOf
category
Function
Params
object
Object
The object to bind and assign the bound methods to.
[methodNames]
...(string
string[])
The object method names to bind,
specified as individual method names or arrays of method names.
Returns
Object
Returns
object.
example
var
view = {
'label': 'docs',
'onClick': function() {
console.log('clicked ' + this.label);
}
};
.bindAll(view);
jQuery('#docs').on('click', view.onClick);
// => logs 'clicked docs' when the element is clicked
|
var bindAll = restParam(function(object, methodNames) {
methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object);
var index = -1,
length = methodNames.length;
while (++index < length) {
var key = methodNames[index];
object[key] = createWrapper(object[key], BIND_FLAG, object);
}
return object;
});
|
|
Creates a function that invokes the method at This method differs from The static
memberOf
category
Function
Params
object
Object
The object the method belongs to.
key
string
The key of the method.
[partials]
...*
The arguments to be partially applied.
Returns
Function
Returns the new bound function.
example
var
object = {
'user': 'fred',
'greet': function(greeting, punctuation) {
return greeting + ' ' + this.user + punctuation;
}
};
var bound = .bindKey(object, 'greet', 'hi');
bound('!');
// => 'hi fred!'
object.greet = function(greeting, punctuation) {
return greeting + 'ya ' + this.user + punctuation;
};
bound('!');
// => 'hiya fred!'
// using placeholders
var bound = .bindKey(object, 'greet', , '!');
bound('hi');
// => 'hiya fred!'
|
var bindKey = restParam(function(object, key, partials) {
var bitmask = BIND_FLAG | BIND_KEY_FLAG;
if (partials.length) {
var holders = replaceHolders(partials, bindKey.placeholder);
bitmask |= PARTIAL_FLAG;
}
return createWrapper(key, bitmask, object, partials, holders);
});
|
|
Creates a function that accepts one or more arguments of The Note: This method does not set the "length" property of curried functions. static
memberOf
category
Function
Params
func
Function
The function to curry.
[arity=func.length]
number
The arity of
func.
param-
Object
[guard] Enables use as a callback for functions like
.map.
Returns
Function
Returns the new curried function.
example
var
abc = function(a, b, c) {
return [a, b, c];
};
var curried = .curry(abc);
curried(1)(2)(3);
// => [1, 2, 3]
curried(1, 2)(3);
// => [1, 2, 3]
curried(1, 2, 3);
// => [1, 2, 3]
// using placeholders
curried(1)(, 3)(2);
// => [1, 2, 3]
|
var curry = createCurry(CURRY_FLAG);
|
|
This method is like The Note: This method does not set the "length" property of curried functions. static
memberOf
category
Function
Params
func
Function
The function to curry.
[arity=func.length]
number
The arity of
func.
param-
Object
[guard] Enables use as a callback for functions like
.map.
Returns
Function
Returns the new curried function.
example
var
abc = function(a, b, c) {
return [a, b, c];
};
var curried = .curryRight(abc);
curried(3)(2)(1);
// => [1, 2, 3]
curried(2, 3)(1);
// => [1, 2, 3]
curried(1, 2, 3);
// => [1, 2, 3]
// using placeholders
curried(3)(1, _)(2);
// => [1, 2, 3]
|
var curryRight = createCurry(CURRY_RIGHT_FLAG);
|
|
Creates a debounced function that delays invoking Note: If See David Corbacho's article
for details over the differences between static
memberOf
category
Function
Params
func
Function
The function to debounce.
[wait=0]
number
The number of milliseconds to delay.
[options]
Object
The options object.
[options.leading=false]
boolean
Specify invoking on the leading
edge of the timeout.
[options.maxWait]
number
The maximum time
func is allowed to be
delayed before it is invoked.
[options.trailing=true]
boolean
Specify invoking on the trailing
edge of the timeout.
Returns
Function
Returns the new debounced function.
example
//
avoid costly calculations while the window size is in flux
jQuery(window).on('resize', .debounce(calculateLayout, 150));
// invoke
sendMail when the click event is fired, debouncing subsequent calls
jQuery('#postbox').on('click', .debounce(sendMail, 300, {
'leading': true,
'trailing': false
}));
// ensure batchLog is invoked once after 1 second of debounced calls
var source = new EventSource('/stream');
jQuery(source).on('message', .debounce(batchLog, 250, {
'maxWait': 1000
}));
// cancel a debounced call
var todoChanges = .debounce(batchLog, 1000);
Object.observe(models.todo, todoChanges);
Object.observe(models, function(changes) {
if (.find(changes, { 'user': 'todo', 'type': 'delete'})) {
todoChanges.cancel();
}
}, ['delete']);
// ...at some point models.todo is changed
models.todo.completed = true;
// ...before 1 second has passed models.todo is deleted
// which cancels the debounced todoChanges call
delete models.todo;
|
function debounce(func, wait, options) {
var args,
maxTimeoutId,
result,
stamp,
thisArg,
timeoutId,
trailingCall,
lastCalled = 0,
maxWait = false,
trailing = true;
if (typeof func != 'function') {
throw new TypeError(FUNC_ERROR_TEXT);
}
wait = wait < 0 ? 0 : (+wait || 0);
if (options === true) {
var leading = true;
trailing = false;
} else if (isObject(options)) {
leading = !!options.leading;
maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);
trailing = 'trailing' in options ? !!options.trailing : trailing;
}
function cancel() {
if (timeoutId) {
clearTimeout(timeoutId);
}
if (maxTimeoutId) {
clearTimeout(maxTimeoutId);
}
lastCalled = 0;
maxTimeoutId = timeoutId = trailingCall = undefined;
}
function complete(isCalled, id) {
if (id) {
clearTimeout(id);
}
maxTimeoutId = timeoutId = trailingCall = undefined;
if (isCalled) {
lastCalled = now();
result = func.apply(thisArg, args);
if (!timeoutId && !maxTimeoutId) {
args = thisArg = undefined;
}
}
}
function delayed() {
var remaining = wait - (now() - stamp);
if (remaining <= 0 || remaining > wait) {
complete(trailingCall, maxTimeoutId);
} else {
timeoutId = setTimeout(delayed, remaining);
}
}
function maxDelayed() {
complete(trailing, timeoutId);
}
function debounced() {
args = arguments;
stamp = now();
thisArg = this;
trailingCall = trailing && (timeoutId || !leading);
if (maxWait === false) {
var leadingCall = leading && !timeoutId;
} else {
if (!maxTimeoutId && !leading) {
lastCalled = stamp;
}
var remaining = maxWait - (stamp - lastCalled),
isCalled = remaining <= 0 || remaining > maxWait;
if (isCalled) {
if (maxTimeoutId) {
maxTimeoutId = clearTimeout(maxTimeoutId);
}
lastCalled = stamp;
result = func.apply(thisArg, args);
}
else if (!maxTimeoutId) {
maxTimeoutId = setTimeout(maxDelayed, remaining);
}
}
if (isCalled && timeoutId) {
timeoutId = clearTimeout(timeoutId);
}
else if (!timeoutId && wait !== maxWait) {
timeoutId = setTimeout(delayed, wait);
}
if (leadingCall) {
isCalled = true;
result = func.apply(thisArg, args);
}
if (isCalled && !timeoutId && !maxTimeoutId) {
args = thisArg = undefined;
}
return result;
}
debounced.cancel = cancel;
return debounced;
}
|
|
Defers invoking the static
memberOf
category
Function
Params
func
Function
The function to defer.
[args]
...*
The arguments to invoke the function with.
Returns
number
Returns the timer id.
example
.defer(function(text)
console.log(text);
{
console.log(text);
}, 'deferred');
// logs 'deferred' after one or more milliseconds
|
var defer = restParam(function(func, args) {
return baseDelay(func, 1, args);
});
|
|
Invokes static
memberOf
category
Function
Params
func
Function
The function to delay.
wait
number
The number of milliseconds to delay invocation.
[args]
...*
The arguments to invoke the function with.
Returns
number
Returns the timer id.
example
.delay(function(text)
console.log(text);
{
console.log(text);
}, 1000, 'later');
// => logs 'later' after one second
|
var delay = restParam(function(func, wait, args) {
return baseDelay(func, wait, args);
});
|
|
Creates a function that returns the result of invoking the provided
functions with the static
memberOf
_
category
Function
Params
[funcs]
...Function
Functions to invoke.
Returns
Function
Returns the new function.
example
function
square(n) {
return n * n;
}
var addSquare = .flow(.add, square);
addSquare(1, 2);
// => 9
|
var flow = createFlow();
|
|
This method is like static
memberOf
alias
backflow, compose
category
Function
Params
[funcs]
...Function
Functions to invoke.
Returns
Function
Returns the new function.
example
function
square(n) {
return n * n;
}
var addSquare = .flowRight(square, .add);
addSquare(1, 2);
// => 9
|
var flowRight = createFlow(true);
|
|
Creates a function that memoizes the result of Note: The cache is exposed as the static
memberOf
category
Function
Params
func
Function
The function to have its output memoized.
[resolver]
Function
The function to resolve the cache key.
Returns
Function
Returns the new memoizing function.
example
var
upperCase = .memoize(function(string) {
return string.toUpperCase();
});
upperCase('fred');
// => 'FRED'
// modifying the result cache
upperCase.cache.set('fred', 'BARNEY');
upperCase('fred');
// => 'BARNEY'
// replacing
.memoize.Cache
var object = { 'user': 'fred' };
var other = { 'user': 'barney' };
var identity = .memoize(.identity);
identity(object);
// => { 'user': 'fred' }
identity(other);
// => { 'user': 'fred' }
.memoize.Cache = WeakMap;
var identity = .memoize(_.identity);
identity(object);
// => { 'user': 'fred' }
identity(other);
// => { 'user': 'barney' }
|
function memoize(func, resolver) {
if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
throw new TypeError(FUNC_ERROR_TEXT);
}
var memoized = function() {
var args = arguments,
key = resolver ? resolver.apply(this, args) : args[0],
cache = memoized.cache;
if (cache.has(key)) {
return cache.get(key);
}
var result = func.apply(this, args);
memoized.cache = cache.set(key, result);
return result;
};
memoized.cache = new memoize.Cache;
return memoized;
}
|
|
Creates a function that runs each argument through a corresponding transform function. static
memberOf
category
Function
Params
func
Function
The function to wrap.
[transforms]
...(Function
Function[])
The functions to transform
arguments, specified as individual functions or arrays of functions.
Returns
Function
Returns the new function.
example
function
doubled(n) {
return n 2;
}
function square(n) {
return n n;
}
var modded = .modArgs(function(x, y) {
return [x, y];
}, square, doubled);
modded(1, 2);
// => [1, 4]
modded(5, 10);
// => [25, 20]
|
var modArgs = restParam(function(func, transforms) {
transforms = baseFlatten(transforms);
if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) {
throw new TypeError(FUNC_ERROR_TEXT);
}
var length = transforms.length;
return restParam(function(args) {
var index = nativeMin(args.length, length);
while (index--) {
args[index] = transforms[index](args[index]);
}
return func.apply(this, args);
});
});
|
|
Creates a function that negates the result of the predicate static
memberOf
_
category
Function
Params
predicate
Function
The predicate to negate.
Returns
Function
Returns the new function.
example
function
isEven(n) {
return n % 2 == 0;
}
.filter([1, 2, 3, 4, 5, 6], .negate(isEven));
// => [1, 3, 5]
|
function negate(predicate) {
if (typeof predicate != 'function') {
throw new TypeError(FUNC_ERROR_TEXT);
}
return function() {
return !predicate.apply(this, arguments);
};
}
|
|
Creates a function that is restricted to invoking static
memberOf
category
Function
Params
func
Function
The function to restrict.
Returns
Function
Returns the new restricted function.
example
var
initialize = .once(createApplication);
initialize();
initialize();
//
initialize invokes createApplication once
|
function once(func) {
return before(2, func);
}
|
|
Creates a function that invokes The Note: This method does not set the "length" property of partially applied functions. static
memberOf
category
Function
Params
func
Function
The function to partially apply arguments to.
[partials]
...*
The arguments to be partially applied.
Returns
Function
Returns the new partially applied function.
example
var
greet = function(greeting, name) {
return greeting + ' ' + name;
};
var sayHelloTo = _.partial(greet, 'hello');
sayHelloTo('fred');
// => 'hello fred'
// using placeholders
var greetFred = .partial(greet, , 'fred');
greetFred('hi');
// => 'hi fred'
|
var partial = createPartial(PARTIAL_FLAG);
|
|
This method is like The Note: This method does not set the "length" property of partially applied functions. static
memberOf
category
Function
Params
func
Function
The function to partially apply arguments to.
[partials]
...*
The arguments to be partially applied.
Returns
Function
Returns the new partially applied function.
example
var
greet = function(greeting, name) {
return greeting + ' ' + name;
};
var greetFred = _.partialRight(greet, 'fred');
greetFred('hi');
// => 'hi fred'
// using placeholders
var sayHelloTo = .partialRight(greet, 'hello', );
sayHelloTo('fred');
// => 'hello fred'
|
var partialRight = createPartial(PARTIAL_RIGHT_FLAG);
|
|
Creates a function that invokes static
memberOf
category
Function
Params
func
Function
The function to rearrange arguments for.
indexes
...(number
number[])
The arranged argument indexes,
specified as individual indexes or arrays of indexes.
Returns
Function
Returns the new function.
example
var
rearged = .rearg(function(a, b, c) {
return [a, b, c];
}, 2, 0, 1);
rearged('b', 'c', 'a')
// => ['a', 'b', 'c']
var map = .rearg(.map, [1, 0]);
map(function(n) {
return n * 3;
}, [1, 2, 3]);
// => [3, 6, 9]
|
var rearg = restParam(function(func, indexes) {
return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes));
});
|
|
Creates a function that invokes Note: This method is based on the rest parameter. static
memberOf
_
category
Function
Params
func
Function
The function to apply a rest parameter to.
[start=func.length-1]
number
The start position of the rest parameter.
Returns
Function
Returns the new function.
example
var
say = .restParam(function(what, names) {
return what + ' ' + .initial(names).join(', ') +
(.size(names) > 1 ? ', & ' : '') + .last(names);
});
say('hello', 'fred', 'barney', 'pebbles');
// => 'hello fred, barney, & pebbles'
|
function restParam(func, start) {
if (typeof func != 'function') {
throw new TypeError(FUNC_ERROR_TEXT);
}
start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);
return function() {
var args = arguments,
index = -1,
length = nativeMax(args.length - start, 0),
rest = Array(length);
while (++index < length) {
rest[index] = args[start + index];
}
switch (start) {
case 0: return func.call(this, rest);
case 1: return func.call(this, args[0], rest);
case 2: return func.call(this, args[0], args[1], rest);
}
var otherArgs = Array(start + 1);
index = -1;
while (++index < start) {
otherArgs[index] = args[index];
}
otherArgs[start] = rest;
return func.apply(this, otherArgs);
};
}
|
|
Creates a function that invokes Note: This method is based on the spread operator. static
memberOf
category
Function
Params
func
Function
The function to spread arguments over.
Returns
Function
Returns the new function.
example
var
say = .spread(function(who, what) {
return who + ' says ' + what;
});
say(['fred', 'hello']);
// => 'fred says hello'
// with a Promise
var numbers = Promise.all([
Promise.resolve(40),
Promise.resolve(36)
]);
numbers.then(_.spread(function(x, y) {
return x + y;
}));
// => a Promise of 76
|
function spread(func) {
if (typeof func != 'function') {
throw new TypeError(FUNC_ERROR_TEXT);
}
return function(array) {
return func.apply(this, array);
};
}
|
|
Creates a throttled function that only invokes Note: If See David Corbacho's article
for details over the differences between static
memberOf
category
Function
Params
func
Function
The function to throttle.
[wait=0]
number
The number of milliseconds to throttle invocations to.
[options]
Object
The options object.
[options.leading=true]
boolean
Specify invoking on the leading
edge of the timeout.
[options.trailing=true]
boolean
Specify invoking on the trailing
edge of the timeout.
Returns
Function
Returns the new throttled function.
example
//
avoid excessively updating the position while scrolling
jQuery(window).on('scroll', .throttle(updatePosition, 100));
// invoke
renewToken when the click event is fired, but not more than once every 5 minutes
jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {
'trailing': false
}));
// cancel a trailing throttled call
jQuery(window).on('popstate', throttled.cancel);
|
function throttle(func, wait, options) {
var leading = true,
trailing = true;
if (typeof func != 'function') {
throw new TypeError(FUNC_ERROR_TEXT);
}
if (options === false) {
leading = false;
} else if (isObject(options)) {
leading = 'leading' in options ? !!options.leading : leading;
trailing = 'trailing' in options ? !!options.trailing : trailing;
}
return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });
}
|
|
Creates a function that provides static
memberOf
_
category
Function
Params
value
*
The value to wrap.
wrapper
Function
The wrapper function.
Returns
Function
Returns the new function.
example
var
p = .wrap(.escape, function(func, text) {
return '' + func(text) + '';
});
p('fred, barney, & pebbles');
// => 'fred, barney, & pebbles'
|
function wrap(value, wrapper) {
wrapper = wrapper == null ? identity : wrapper;
return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []);
}
/*------------------------------------------------------------------------*/
|
|
Creates a clone of Note: This method is loosely based on the
structured clone algorithm.
The enumerable properties of static
memberOf
category
Lang
Params
value
The value to clone.
[isDeep]
boolean
Specify a deep clone.
[customizer]
Function
The function to customize cloning values.
[thisArg]
The
this binding of customizer.
Returns
*
Returns the cloned value.
example
var
users = [
{ 'user': 'barney' },
{ 'user': 'fred' }
];
var shallow = .clone(users);
shallow[0] === users[0];
// => true
var deep = _.clone(users, true);
deep[0] === users[0];
// => false
// using a customizer callback
var el = .clone(document.body, function(value) {
if (.isElement(value)) {
return value.cloneNode(false);
}
});
el === document.body
// => false
el.nodeName
// => BODY
el.childNodes.length;
// => 0
|
function clone(value, isDeep, customizer, thisArg) {
if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) {
isDeep = false;
}
else if (typeof isDeep == 'function') {
thisArg = customizer;
customizer = isDeep;
isDeep = false;
}
return typeof customizer == 'function'
? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1))
: baseClone(value, isDeep);
}
|
|
Creates a deep clone of Note: This method is loosely based on the
structured clone algorithm.
The enumerable properties of static
memberOf
category
Lang
Params
value
The value to deep clone.
[customizer]
Function
The function to customize cloning values.
[thisArg]
The
this binding of customizer.
Returns
*
Returns the deep cloned value.
example
var
users = [
{ 'user': 'barney' },
{ 'user': 'fred' }
];
var deep = .cloneDeep(users);
deep[0] === users[0];
// => false
// using a customizer callback
var el = .cloneDeep(document.body, function(value) {
if (.isElement(value)) {
return value.cloneNode(true);
}
});
el === document.body
// => false
el.nodeName
// => BODY
el.childNodes.length;
// => 20
|
function cloneDeep(value, customizer, thisArg) {
return typeof customizer == 'function'
? baseClone(value, true, bindCallback(customizer, thisArg, 1))
: baseClone(value, true);
}
|
|
Checks if static
memberOf
category
Lang
Params
value
The value to compare.
other
The other value to compare.
Returns
boolean
Returns
true if value is greater than other, else false.
example
.gt(3,
1);
// => true
.gt(3, 3);
// => false
.gt(1, 3);
// => false
|
function gt(value, other) {
return value > other;
}
|
|
Checks if static
memberOf
category
Lang
Params
value
The value to compare.
other
The other value to compare.
Returns
boolean
Returns
true if value is greater than or equal to other, else false.
example
.gte(3,
1);
// => true
.gte(3, 3);
// => true
.gte(1, 3);
// => false
|
function gte(value, other) {
return value >= other;
}
|
|
Checks if static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is correctly classified, else false.
example
.isArguments(function()
returnarguments;());
{returnarguments;}());
// => true
_.isArguments([1, 2, 3]);
// => false
|
function isArguments(value) {
return isObjectLike(value) && isArrayLike(value) &&
hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
}
|
|
Checks if static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is correctly classified, else false.
example
.isArray([1,
2, 3]);
// => true
_.isArray(function() { return arguments; }());
// => false
|
var isArray = nativeIsArray || function(value) {
return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
};
|
|
Checks if static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is correctly classified, else false.
example
.isBoolean(false);
//
=> true
_.isBoolean(null);
// => false
|
function isBoolean(value) {
return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag);
}
|
|
Checks if static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is correctly classified, else false.
example
.isDate(new
Date);
// => true
_.isDate('Mon April 23 2012');
// => false
|
function isDate(value) {
return isObjectLike(value) && objToString.call(value) == dateTag;
}
|
|
Checks if static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is a DOM element, else false.
example
.isElement(document.body);
//
=> true
_.isElement('');
// => false
|
function isElement(value) {
return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);
}
|
|
Checks if static
memberOf
category
Lang
Params
value
Array
Object
string
The value to inspect.
Returns
boolean
Returns
true if value is empty, else false.
example
.isEmpty(null);
//
=> true
.isEmpty(true);
// => true
.isEmpty(1);
// => true
.isEmpty([1, 2, 3]);
// => false
.isEmpty({ 'a': 1 });
// => false
|
function isEmpty(value) {
if (value == null) {
return true;
}
if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) ||
(isObjectLike(value) && isFunction(value.splice)))) {
return !value.length;
}
return !keys(value).length;
}
|
|
Performs a deep comparison between two values to determine if they are
equivalent. If Note: This method supports comparing arrays, booleans, static
memberOf
alias
eq
category
Lang
Params
value
The value to compare.
other
The other value to compare.
[customizer]
Function
The function to customize value comparisons.
[thisArg]
*
The
this binding of customizer.
Returns
boolean
Returns
true if the values are equivalent, else false.
example
var
object = { 'user': 'fred' };
var other = { 'user': 'fred' };
object == other;
// => false
.isEqual(object, other);
// => true
// using a customizer callback
var array = ['hello', 'goodbye'];
var other = ['hi', 'goodbye'];
.isEqual(array, other, function(value, other) {
if (.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/)) {
return true;
}
});
// => true
|
function isEqual(value, other, customizer, thisArg) {
customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;
var result = customizer ? customizer(value, other) : undefined;
return result === undefined ? baseIsEqual(value, other, customizer) : !!result;
}
|
|
Checks if static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is an error object, else false.
example
.isError(new
Error);
// => true
_.isError(Error);
// => false
|
function isError(value) {
return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag;
}
|
|
Checks if Note: This method is based on static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is a finite number, else false.
example
.isFinite(10);
//
=> true
.isFinite('10');
// => false
.isFinite(true);
// => false
.isFinite(Object(10));
// => false
.isFinite(Infinity);
// => false
|
function isFinite(value) {
return typeof value == 'number' && nativeIsFinite(value);
}
|
|
Checks if static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is correctly classified, else false.
example
.isFunction();
//
=> true
.isFunction(/abc/);
// => false
|
function isFunction(value) {
|
|
The use of |
return isObject(value) && objToString.call(value) == funcTag;
}
|
|
Checks if static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is an object, else false.
example
.isObject({});
//
=> true
.isObject([1, 2, 3]);
// => true
.isObject(1);
// => false
|
function isObject(value) {
|
|
Avoid a V8 JIT bug in Chrome 19-20. See https://code.google.com/p/v8/issues/detail?id=2291 for more details. |
var type = typeof value;
return !!value && (type == 'object' || type == 'function');
}
|
|
Performs a deep comparison between Note: This method supports comparing properties of arrays, booleans,
static
memberOf
category
Lang
Params
object
Object
The object to inspect.
source
Object
The object of property values to match.
[customizer]
Function
The function to customize value comparisons.
[thisArg]
*
The
this binding of customizer.
Returns
boolean
Returns
true if object is a match, else false.
example
var
object = { 'user': 'fred', 'age': 40 };
.isMatch(object, { 'age': 40 });
// => true
_.isMatch(object, { 'age': 36 });
// => false
// using a customizer callback
var object = { 'greeting': 'hello' };
var source = { 'greeting': 'hi' };
.isMatch(object, source, function(value, other) {
return .every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/) || undefined;
});
// => true
|
function isMatch(object, source, customizer, thisArg) {
customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;
return baseIsMatch(object, getMatchData(source), customizer);
}
|
|
Checks if Note: This method is not the same as static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is NaN, else false.
example
.isNaN(NaN);
//
=> true
.isNaN(new Number(NaN));
// => true
isNaN(undefined);
// => true
.isNaN(undefined);
// => false
|
function isNaN(value) {
|
|
An |
return isNumber(value) && value != +value;
}
|
|
Checks if static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is a native function, else false.
example
.isNative(Array.prototype.push);
//
=> true
.isNative();
// => false
|
function isNative(value) {
if (value == null) {
return false;
}
if (isFunction(value)) {
return reIsNative.test(fnToString.call(value));
}
return isObjectLike(value) && reIsHostCtor.test(value);
}
|
|
Checks if static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is null, else false.
example
.isNull(null);
//
=> true
_.isNull(void 0);
// => false
|
function isNull(value) {
return value === null;
}
|
|
Checks if Note: To exclude static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is correctly classified, else false.
example
.isNumber(8.4);
//
=> true
.isNumber(NaN);
// => true
_.isNumber('8.4');
// => false
|
function isNumber(value) {
return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);
}
|
|
Checks if Note: This method assumes objects created by the static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is a plain object, else false.
example
function
Foo() {
this.a = 1;
}
.isPlainObject(new Foo);
// => false
.isPlainObject([1, 2, 3]);
// => false
.isPlainObject({ 'x': 0, 'y': 0 });
// => true
_.isPlainObject(Object.create(null));
// => true
|
function isPlainObject(value) {
var Ctor;
|
|
Exit early for non |
if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) ||
(!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {
return false;
}
|
|
IE < 9 iterates inherited properties before own properties. If the first iterated property is an object's own property then there are no inherited enumerable properties. |
var result;
|
|
In most environments an object's own properties are iterated before its inherited properties. If the last iterated property is an object's own property then there are no inherited enumerable properties. |
baseForIn(value, function(subValue, key) {
result = key;
});
return result === undefined || hasOwnProperty.call(value, result);
}
|
|
Checks if static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is correctly classified, else false.
example
.isRegExp(/abc/);
//
=> true
_.isRegExp('/abc/');
// => false
|
function isRegExp(value) {
return isObject(value) && objToString.call(value) == regexpTag;
}
|
|
Checks if static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is correctly classified, else false.
example
.isString('abc');
//
=> true
_.isString(1);
// => false
|
function isString(value) {
return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);
}
|
|
Checks if static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is correctly classified, else false.
example
.isTypedArray(new
Uint8Array);
// => true
_.isTypedArray([]);
// => false
|
function isTypedArray(value) {
return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];
}
|
|
Checks if static
memberOf
category
Lang
Params
value
*
The value to check.
Returns
boolean
Returns
true if value is undefined, else false.
example
.isUndefined(void
0);
// => true
_.isUndefined(null);
// => false
|
function isUndefined(value) {
return value === undefined;
}
|
|
Checks if static
memberOf
category
Lang
Params
value
The value to compare.
other
The other value to compare.
Returns
boolean
Returns
true if value is less than other, else false.
example
.lt(1,
3);
// => true
.lt(3, 3);
// => false
.lt(3, 1);
// => false
|
function lt(value, other) {
return value < other;
}
|
|
Checks if static
memberOf
category
Lang
Params
value
The value to compare.
other
The other value to compare.
Returns
boolean
Returns
true if value is less than or equal to other, else false.
example
.lte(1,
3);
// => true
.lte(3, 3);
// => true
.lte(3, 1);
// => false
|
function lte(value, other) {
return value <= other;
}
|
|
Converts static
memberOf
category
Lang
Params
value
*
The value to convert.
Returns
Array
Returns the converted array.
example
(function()
return.toArray(arguments).slice(1);
{
return_.toArray(arguments).slice(1);
}(1, 2, 3));
// => [2, 3]
|
function toArray(value) {
var length = value ? getLength(value) : 0;
if (!isLength(length)) {
return values(value);
}
if (!length) {
return [];
}
return arrayCopy(value);
}
|
|
Converts static
memberOf
category
Lang
Params
value
*
The value to convert.
Returns
Object
Returns the converted plain object.
example
function
Foo() {
this.b = 2;
}
Foo.prototype.c = 3;
.assign({ 'a': 1 }, new Foo);
// => { 'a': 1, 'b': 2 }
.assign({ 'a': 1 }, .toPlainObject(new Foo));
// => { 'a': 1, 'b': 2, 'c': 3 }
|
function toPlainObject(value) {
return baseCopy(value, keysIn(value));
}
/*------------------------------------------------------------------------*/
|
|
Recursively merges own enumerable properties of the source object(s), that
don't resolve to static
memberOf
category
Object
Params
object
Object
The destination object.
[sources]
...Object
The source objects.
[customizer]
Function
The function to customize assigned values.
[thisArg]
*
The
this binding of customizer.
Returns
Object
Returns
object.
example
var
users = {
'data': [{ 'user': 'barney' }, { 'user': 'fred' }]
};
var ages = {
'data': [{ 'age': 36 }, { 'age': 40 }]
};
.merge(users, ages);
// => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
// using a customizer callback
var object = {
'fruits': ['apple'],
'vegetables': ['beet']
};
var other = {
'fruits': ['banana'],
'vegetables': ['carrot']
};
.merge(object, other, function(a, b) {
if (.isArray(a)) {
return a.concat(b);
}
});
// => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }
|
var merge = createAssigner(baseMerge);
|
|
Assigns own enumerable properties of source object(s) to the destination
object. Subsequent sources overwrite property assignments of previous sources.
If Note: This method mutates static
memberOf
alias
extend
category
Object
Params
object
Object
The destination object.
[sources]
...Object
The source objects.
[customizer]
Function
The function to customize assigned values.
[thisArg]
*
The
this binding of customizer.
Returns
Object
Returns
object.
example
.assign({
'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });
// => { 'user': 'fred', 'age': 40 }
// using a customizer callback
var defaults = .partialRight(.assign, function(value, other) {
return _.isUndefined(value) ? other : value;
});
defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
// => { 'user': 'barney', 'age': 36 }
|
var assign = createAssigner(function(object, source, customizer) {
return customizer
? assignWith(object, source, customizer)
: baseAssign(object, source);
});
|
|
Creates an object that inherits from the given static
memberOf
category
Object
Params
prototype
Object
The object to inherit from.
[properties]
Object
The properties to assign to the object.
param-
Object
[guard] Enables use as a callback for functions like
.map.
Returns
Object
Returns the new object.
example
function
Shape() {
this.x = 0;
this.y = 0;
}
function Circle() {
Shape.call(this);
}
Circle.prototype = _.create(Shape.prototype, {
'constructor': Circle
});
var circle = new Circle;
circle instanceof Circle;
// => true
circle instanceof Shape;
// => true
|
function create(prototype, properties, guard) {
var result = baseCreate(prototype);
if (guard && isIterateeCall(prototype, properties, guard)) {
properties = undefined;
}
return properties ? baseAssign(result, properties) : result;
}
|
|
Assigns own enumerable properties of source object(s) to the destination
object for all destination properties that resolve to Note: This method mutates static
memberOf
category
Object
Params
object
Object
The destination object.
[sources]
...Object
The source objects.
Returns
Object
Returns
object.
example
.defaults({
'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
// => { 'user': 'barney', 'age': 36 }
|
var defaults = createDefaults(assign, assignDefaults);
|
|
This method is like Note: This method mutates static
memberOf
category
Object
Params
object
Object
The destination object.
[sources]
...Object
The source objects.
Returns
Object
Returns
object.
example
_.defaultsDeep({
'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } });
// => { 'user': { 'name': 'barney', 'age': 36 } }
|
var defaultsDeep = createDefaults(merge, mergeDefaults);
|
|
This method is like If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
category
Object
Params
object
Object
The object to search.
[predicate=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of predicate.
Returns
string
undefined
Returns the key of the matched element, else
undefined.
example
var
users = {
'barney': { 'age': 36, 'active': true },
'fred': { 'age': 40, 'active': false },
'pebbles': { 'age': 1, 'active': true }
};
.findKey(users, function(chr) {
return chr.age < 40;
});
// => 'barney' (iteration order is not guaranteed)
// using the
.matches callback shorthand
.findKey(users, { 'age': 1, 'active': true });
// => 'pebbles'
// using the .matchesProperty callback shorthand
.findKey(users, 'active', false);
// => 'fred'
// using the .property callback shorthand
_.findKey(users, 'active');
// => 'barney'
|
var findKey = createFindKey(baseForOwn);
|
|
This method is like If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
category
Object
Params
object
Object
The object to search.
[predicate=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of predicate.
Returns
string
undefined
Returns the key of the matched element, else
undefined.
example
var
users = {
'barney': { 'age': 36, 'active': true },
'fred': { 'age': 40, 'active': false },
'pebbles': { 'age': 1, 'active': true }
};
.findLastKey(users, function(chr) {
return chr.age < 40;
});
// => returns
pebbles assuming </em>.findKey<code>returns</code>barney
// using the .matches callback shorthand
.findLastKey(users, { 'age': 36, 'active': true });
// => 'barney'
// using the .matchesProperty callback shorthand
.findLastKey(users, 'active', false);
// => 'fred'
// using the .property callback shorthand
.findLastKey(users, 'active');
// => 'pebbles'
|
var findLastKey = createFindKey(baseForOwnRight);
|
|
Iterates over own and inherited enumerable properties of an object invoking
static
memberOf
category
Object
Params
object
Object
The object to iterate over.
[iteratee=.identity]
Function
The function invoked per iteration.
[thisArg]
*
The
this binding of iteratee.
Returns
Object
Returns
object.
example
function
Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.forIn(new Foo, function(value, key) {
console.log(key);
});
// => logs 'a', 'b', and 'c' (iteration order is not guaranteed)
|
var forIn = createForIn(baseFor);
|
|
This method is like static
memberOf
category
Object
Params
object
Object
The object to iterate over.
[iteratee=_.identity]
Function
The function invoked per iteration.
[thisArg]
*
The
this binding of iteratee.
Returns
Object
Returns
object.
example
function
Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
.forInRight(new Foo, function(value, key) {
console.log(key);
});
// => logs 'c', 'b', and 'a' assuming
</em>.forIn logs 'a', 'b', and 'c'
|
var forInRight = createForIn(baseForRight);
|
|
Iterates over own enumerable properties of an object invoking static
memberOf
category
Object
Params
object
Object
The object to iterate over.
[iteratee=.identity]
Function
The function invoked per iteration.
[thisArg]
*
The
this binding of iteratee.
Returns
Object
Returns
object.
example
function
Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.forOwn(new Foo, function(value, key) {
console.log(key);
});
// => logs 'a' and 'b' (iteration order is not guaranteed)
|
var forOwn = createForOwn(baseForOwn);
|
|
This method is like static
memberOf
category
Object
Params
object
Object
The object to iterate over.
[iteratee=_.identity]
Function
The function invoked per iteration.
[thisArg]
*
The
this binding of iteratee.
Returns
Object
Returns
object.
example
function
Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
.forOwnRight(new Foo, function(value, key) {
console.log(key);
});
// => logs 'b' and 'a' assuming
</em>.forOwn logs 'a' and 'b'
|
var forOwnRight = createForOwn(baseForOwnRight);
|
|
Creates an array of function property names from all enumerable properties,
own and inherited, of static
memberOf
alias
methods
category
Object
Params
object
Object
The object to inspect.
Returns
Array
Returns the new array of property names.
example
.functions(_);
//
=> ['after', 'ary', 'assign', ...]
|
function functions(object) {
return baseFunctions(object, keysIn(object));
}
|
|
Gets the property value at static
memberOf
category
Object
Params
object
Object
The object to query.
path
Array
string
The path of the property to get.
[defaultValue]
The value returned if the resolved value is
undefined.
Returns
Returns the resolved value.
example
var
object = { 'a': [{ 'b': { 'c': 3 } }] };
.get(object, 'a[0].b.c');
// => 3
.get(object, ['a', '0', 'b', 'c']);
// => 3
.get(object, 'a.b.c', 'default');
// => 'default'
|
function get(object, path, defaultValue) {
var result = object == null ? undefined : baseGet(object, toPath(path), path + '');
return result === undefined ? defaultValue : result;
}
|
|
Checks if static
memberOf
category
Object
Params
object
Object
The object to query.
path
Array
string
The path to check.
Returns
boolean
Returns
true if path is a direct property, else false.
example
var
object = { 'a': { 'b': { 'c': 3 } } };
.has(object, 'a');
// => true
.has(object, 'a.b.c');
// => true
.has(object, ['a', 'b', 'c']);
// => true
|
function has(object, path) {
if (object == null) {
return false;
}
var result = hasOwnProperty.call(object, path);
if (!result && !isKey(path)) {
path = toPath(path);
object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
if (object == null) {
return false;
}
path = last(path);
result = hasOwnProperty.call(object, path);
}
return result || (isLength(object.length) && isIndex(path, object.length) &&
(isArray(object) || isArguments(object)));
}
|
|
Creates an object composed of the inverted keys and values of static
memberOf
category
Object
Params
object
Object
The object to invert.
[multiValue]
boolean
Allow multiple values per key.
param-
Object
[guard] Enables use as a callback for functions like
.map.
Returns
Object
Returns the new inverted object.
example
var
object = { 'a': 1, 'b': 2, 'c': 1 };
.invert(object);
// => { '1': 'c', '2': 'b' }
// with
multiValue
.invert(object, true);
// => { '1': ['a', 'c'], '2': ['b'] }
|
function invert(object, multiValue, guard) {
if (guard && isIterateeCall(object, multiValue, guard)) {
multiValue = undefined;
}
var index = -1,
props = keys(object),
length = props.length,
result = {};
while (++index < length) {
var key = props[index],
value = object[key];
if (multiValue) {
if (hasOwnProperty.call(result, value)) {
result[value].push(key);
} else {
result[value] = [key];
}
}
else {
result[value] = key;
}
}
return result;
}
|
|
Creates an array of the own enumerable property names of Note: Non-object values are coerced to objects. See the ES spec for more details. static
memberOf
category
Object
Params
object
Object
The object to query.
Returns
Array
Returns the array of property names.
example
function
Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
.keys(new Foo);
// => ['a', 'b'] (iteration order is not guaranteed)
_.keys('hi');
// => ['0', '1']
|
var keys = !nativeKeys ? shimKeys : function(object) {
var Ctor = object == null ? undefined : object.constructor;
if ((typeof Ctor == 'function' && Ctor.prototype === object) ||
(typeof object != 'function' && isArrayLike(object))) {
return shimKeys(object);
}
return isObject(object) ? nativeKeys(object) : [];
};
|
|
Creates an array of the own and inherited enumerable property names of Note: Non-object values are coerced to objects. static
memberOf
category
Object
Params
object
Object
The object to query.
Returns
Array
Returns the array of property names.
example
function
Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
.keysIn(new Foo);
// => ['a', 'b', 'c'] (iteration order is not guaranteed)
|
function keysIn(object) {
if (object == null) {
return [];
}
if (!isObject(object)) {
object = Object(object);
}
var length = object.length;
length = (length && isLength(length) &&
(isArray(object) || isArguments(object)) && length) || 0;
var Ctor = object.constructor,
index = -1,
isProto = typeof Ctor == 'function' && Ctor.prototype === object,
result = Array(length),
skipIndexes = length > 0;
while (++index < length) {
result[index] = (index + '');
}
for (var key in object) {
if (!(skipIndexes && isIndex(key, length)) &&
!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
result.push(key);
}
}
return result;
}
|
|
The opposite of static
memberOf
category
Object
Params
object
Object
The object to iterate over.
[iteratee=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of iteratee.
Returns
Object
Returns the new mapped object.
example
.mapKeys({
'a': 1, 'b': 2 }, function(value, key) {
return key + value;
});
// => { 'a1': 1, 'b2': 2 }
|
var mapKeys = createObjectMapper(true);
|
|
Creates an object with the same keys as If a property name is provided for If a value is also provided for If an object is provided for static
memberOf
category
Object
Params
object
Object
The object to iterate over.
[iteratee=.identity]
Function
Object
string
The function invoked
per iteration.
[thisArg]
*
The
this binding of iteratee.
Returns
Object
Returns the new mapped object.
example
.mapValues({
'a': 1, 'b': 2 }, function(n) {
return n * 3;
});
// => { 'a': 3, 'b': 6 }
var users = {
'fred': { 'user': 'fred', 'age': 40 },
'pebbles': { 'user': 'pebbles', 'age': 1 }
};
// using the
.property callback shorthand
.mapValues(users, 'age');
// => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
|
var mapValues = createObjectMapper();
|
|
The opposite of static
memberOf
category
Object
Params
object
Object
The source object.
[predicate]
Function
...(string
string[])
The function invoked per
iteration or property names to omit, specified as individual property
names or arrays of property names.
[thisArg]
*
The
this binding of predicate.
Returns
Object
Returns the new object.
example
var
object = { 'user': 'fred', 'age': 40 };
_.omit(object, 'age');
// => { 'user': 'fred' }
.omit(object, .isNumber);
// => { 'user': 'fred' }
|
var omit = restParam(function(object, props) {
if (object == null) {
return {};
}
if (typeof props[0] != 'function') {
var props = arrayMap(baseFlatten(props), String);
return pickByArray(object, baseDifference(keysIn(object), props));
}
var predicate = bindCallback(props[0], props[1], 3);
return pickByCallback(object, function(value, key, object) {
return !predicate(value, key, object);
});
});
|
|
Creates a two dimensional array of the key-value pairs for static
memberOf
category
Object
Params
object
Object
The object to query.
Returns
Array
Returns the new array of key-value pairs.
example
.pairs({
'barney': 36, 'fred': 40 });
// => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed)
|
function pairs(object) {
object = toObject(object);
var index = -1,
props = keys(object),
length = props.length,
result = Array(length);
while (++index < length) {
var key = props[index];
result[index] = [key, object[key]];
}
return result;
}
|
|
Creates an object composed of the picked static
memberOf
category
Object
Params
object
Object
The source object.
[predicate]
Function
...(string
string[])
The function invoked per
iteration or property names to pick, specified as individual property
names or arrays of property names.
[thisArg]
*
The
this binding of predicate.
Returns
Object
Returns the new object.
example
var
object = { 'user': 'fred', 'age': 40 };
.pick(object, 'user');
// => { 'user': 'fred' }
.pick(object, .isString);
// => { 'user': 'fred' }
|
var pick = restParam(function(object, props) {
if (object == null) {
return {};
}
return typeof props[0] == 'function'
? pickByCallback(object, bindCallback(props[0], props[1], 3))
: pickByArray(object, baseFlatten(props));
});
|
|
This method is like static
memberOf
category
Object
Params
object
Object
The object to query.
path
Array
string
The path of the property to resolve.
[defaultValue]
The value returned if the resolved value is
undefined.
Returns
Returns the resolved value.
example
var
object = { 'a': [{ 'b': { 'c1': 3, 'c2': .constant(4) } }] };
.result(object, 'a[0].b.c1');
// => 3
.result(object, 'a[0].b.c2');
// => 4
.result(object, 'a.b.c', 'default');
// => 'default'
.result(object, 'a.b.c', .constant('default'));
// => 'default'
|
function result(object, path, defaultValue) {
var result = object == null ? undefined : object[path];
if (result === undefined) {
if (object != null && !isKey(path, object)) {
path = toPath(path);
object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
result = object == null ? undefined : object[last(path)];
}
result = result === undefined ? defaultValue : result;
}
return isFunction(result) ? result.call(object) : result;
}
|
|
Sets the property value of static
memberOf
category
Object
Params
object
Object
The object to augment.
path
Array
string
The path of the property to set.
value
*
The value to set.
Returns
Object
Returns
object.
example
var
object = { 'a': [{ 'b': { 'c': 3 } }] };
.set(object, 'a[0].b.c', 4);
console.log(object.a[0].b.c);
// => 4
_.set(object, 'x[0].y.z', 5);
console.log(object.x[0].y.z);
// => 5
|
function set(object, path, value) {
if (object == null) {
return object;
}
var pathKey = (path + '');
path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path);
var index = -1,
length = path.length,
lastIndex = length - 1,
nested = object;
while (nested != null && ++index < length) {
var key = path[index];
if (isObject(nested)) {
if (index == lastIndex) {
nested[key] = value;
} else if (nested[key] == null) {
nested[key] = isIndex(path[index + 1]) ? [] : {};
}
}
nested = nested[key];
}
return object;
}
|
|
An alternative to static
memberOf
category
Object
Params
object
Array
Object
The object to iterate over.
[iteratee=.identity]
Function
The function invoked per iteration.
[accumulator]
The custom accumulator value.
[thisArg]
The
this binding of iteratee.
Returns
*
Returns the accumulated value.
example
.transform([2,
3, 4], function(result, n) {
result.push(n = n);
return n % 2 == 0;
});
// => [4, 9]
_.transform({ 'a': 1, 'b': 2 }, function(result, n, key) {
result[key] = n 3;
});
// => { 'a': 3, 'b': 6 }
|
function transform(object, iteratee, accumulator, thisArg) {
var isArr = isArray(object) || isTypedArray(object);
iteratee = getCallback(iteratee, thisArg, 4);
if (accumulator == null) {
if (isArr || isObject(object)) {
var Ctor = object.constructor;
if (isArr) {
accumulator = isArray(object) ? new Ctor : [];
} else {
accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined);
}
} else {
accumulator = {};
}
}
(isArr ? arrayEach : baseForOwn)(object, function(value, index, object) {
return iteratee(accumulator, value, index, object);
});
return accumulator;
}
|
|
Creates an array of the own enumerable property values of Note: Non-object values are coerced to objects. static
memberOf
category
Object
Params
object
Object
The object to query.
Returns
Array
Returns the array of property values.
example
function
Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
.values(new Foo);
// => [1, 2] (iteration order is not guaranteed)
_.values('hi');
// => ['h', 'i']
|
function values(object) {
return baseValues(object, keys(object));
}
|
|
Creates an array of the own and inherited enumerable property values
of Note: Non-object values are coerced to objects. static
memberOf
category
Object
Params
object
Object
The object to query.
Returns
Array
Returns the array of property values.
example
function
Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
.valuesIn(new Foo);
// => [1, 2, 3] (iteration order is not guaranteed)
|
function valuesIn(object) {
return baseValues(object, keysIn(object));
}
/*------------------------------------------------------------------------*/
|
|
Checks if static
memberOf
category
Number
Params
n
number
The number to check.
[start=0]
number
The start of the range.
end
number
The end of the range.
Returns
boolean
Returns
true if n is in the range, else false.
example
.inRange(3,
2, 4);
// => true
.inRange(4, 8);
// => true
.inRange(4, 2);
// => false
.inRange(2, 2);
// => false
.inRange(1.2, 2);
// => true
_.inRange(5.2, 4);
// => false
|
function inRange(value, start, end) {
start = +start || 0;
if (end === undefined) {
end = start;
start = 0;
} else {
end = +end || 0;
}
return value >= nativeMin(start, end) && value < nativeMax(start, end);
}
|
|
Produces a random number between static
memberOf
category
Number
Params
[min=0]
number
The minimum possible value.
[max=1]
number
The maximum possible value.
[floating]
boolean
Specify returning a floating-point number.
Returns
number
Returns the random number.
example
.random(0,
5);
// => an integer between 0 and 5
.random(5);
// => also an integer between 0 and 5
.random(5, true);
// => a floating-point number between 0 and 5
_.random(1.2, 5.2);
// => a floating-point number between 1.2 and 5.2
|
function random(min, max, floating) {
if (floating && isIterateeCall(min, max, floating)) {
max = floating = undefined;
}
var noMin = min == null,
noMax = max == null;
if (floating == null) {
if (noMax && typeof min == 'boolean') {
floating = min;
min = 1;
}
else if (typeof max == 'boolean') {
floating = max;
noMax = true;
}
}
if (noMin && noMax) {
max = 1;
noMax = false;
}
min = +min || 0;
if (noMax) {
max = min;
min = 0;
} else {
max = +max || 0;
}
if (floating || min % 1 || max % 1) {
var rand = nativeRandom();
return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max);
}
return baseRandom(min, max);
}
/*------------------------------------------------------------------------*/
|
|
Converts static
memberOf
category
String
Params
[string='']
string
The string to convert.
Returns
string
Returns the camel cased string.
example
.camelCase('Foo
Bar');
// => 'fooBar'
_.camelCase('--foo-bar');
// => 'fooBar'
.camelCase('_foo_bar');
// => 'fooBar'
|
var camelCase = createCompounder(function(result, word, index) {
word = word.toLowerCase();
return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word);
});
|
|
Capitalizes the first character of static
memberOf
category
String
Params
[string='']
string
The string to capitalize.
Returns
string
Returns the capitalized string.
example
.capitalize('fred');
//
=> 'Fred'
|
function capitalize(string) {
string = baseToString(string);
return string && (string.charAt(0).toUpperCase() + string.slice(1));
}
|
|
Deburrs static
memberOf
category
String
Params
[string='']
string
The string to deburr.
Returns
string
Returns the deburred string.
example
_.deburr('déjÃ
vu');
// => 'deja vu'
|
function deburr(string) {
string = baseToString(string);
return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, '');
}
|
|
Checks if static
memberOf
category
String
Params
[string='']
string
The string to search.
[target]
string
The string to search for.
[position=string.length]
number
The position to search from.
Returns
boolean
Returns
true if string ends with target, else false.
example
.endsWith('abc',
'c');
// => true
.endsWith('abc', 'b');
// => false
.endsWith('abc', 'b', 2);
// => true
|
function endsWith(string, target, position) {
string = baseToString(string);
target = (target + '');
var length = string.length;
position = position === undefined
? length
: nativeMin(position < 0 ? 0 : (+position || 0), length);
position -= target.length;
return position >= 0 && string.indexOf(target, position) == position;
}
|
|
Converts the characters "&", "<", ">", '"', "'", and "`", in Note: No other characters are escaped. To escape additional characters use a third-party library like he. Though the ">" character is escaped for symmetry, characters like ">" and "/" don't need escaping in HTML and have no special meaning unless they're part of a tag or unquoted attribute value. See Mathias Bynens's article (under "semi-related fun fact") for more details. Backticks are escaped because in Internet Explorer < 9, they can break out of attribute values or HTML comments. See #59, #102, #108, and #133 of the HTML5 Security Cheatsheet for more details. When working with HTML you should always quote attribute values to reduce XSS vectors. static
memberOf
category
String
Params
[string='']
string
The string to escape.
Returns
string
Returns the escaped string.
example
.escape('fred,
barney, & pebbles');
// => 'fred, barney, & pebbles'
|
function escape(string) {
|
|
Reset |
string = baseToString(string);
return (string && reHasUnescapedHtml.test(string))
? string.replace(reUnescapedHtml, escapeHtmlChar)
: string;
}
|
function escapeRegExp(string) {
string = baseToString(string);
return (string && reHasRegExpChars.test(string))
? string.replace(reRegExpChars, escapeRegExpChar)
: (string || '(?:)');
}
|
|
|
Converts static
memberOf
category
String
Params
[string='']
string
The string to convert.
Returns
string
Returns the kebab cased string.
example
.kebabCase('Foo
Bar');
// => 'foo-bar'
_.kebabCase('fooBar');
// => 'foo-bar'
.kebabCase('_foo_bar');
// => 'foo-bar'
|
var kebabCase = createCompounder(function(result, word, index) {
return result + (index ? '-' : '') + word.toLowerCase();
});
|
|
Pads static
memberOf
category
String
Params
[string='']
string
The string to pad.
[length=0]
number
The padding length.
[chars='
string
'] The string used as padding.
Returns
string
Returns the padded string.
example
.pad('abc',
8);
// => ' abc '
.pad('abc', 8, '-');
// => '-abc-'
.pad('abc', 3);
// => 'abc'
|
function pad(string, length, chars) {
string = baseToString(string);
length = +length;
var strLength = string.length;
if (strLength >= length || !nativeIsFinite(length)) {
return string;
}
var mid = (length - strLength) / 2,
leftLength = nativeFloor(mid),
rightLength = nativeCeil(mid);
chars = createPadding('', rightLength, chars);
return chars.slice(0, leftLength) + string + chars;
}
|
|
Pads static
memberOf
category
String
Params
[string='']
string
The string to pad.
[length=0]
number
The padding length.
[chars='
string
'] The string used as padding.
Returns
string
Returns the padded string.
example
.padLeft('abc',
6);
// => ' abc'
.padLeft('abc', 6, '-');
// => '-_abc'
.padLeft('abc', 3);
// => 'abc'
|
var padLeft = createPadDir();
|
|
Pads static
memberOf
category
String
Params
[string='']
string
The string to pad.
[length=0]
number
The padding length.
[chars='
string
'] The string used as padding.
Returns
string
Returns the padded string.
example
.padRight('abc',
6);
// => 'abc '
.padRight('abc', 6, '-');
// => 'abc-'
_.padRight('abc', 3);
// => 'abc'
|
var padRight = createPadDir(true);
|
|
Converts Note: This method aligns with the ES5 implementation
of static
memberOf
category
String
Params
string
string
The string to convert.
[radix]
number
The radix to interpret
value by.
param-
Object
[guard] Enables use as a callback for functions like
.map.
Returns
number
Returns the converted integer.
example
_.parseInt('08');
//
=> 8
.map(['6', '08', '10'], .parseInt);
// => [6, 8, 10]
|
function parseInt(string, radix, guard) {
|
|
Firefox < 21 and Opera < 15 follow ES3 for |
if (guard ? isIterateeCall(string, radix, guard) : radix == null) {
radix = 0;
} else if (radix) {
radix = +radix;
}
string = trim(string);
return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10));
}
|
|
Repeats the given string static
memberOf
category
String
Params
[string='']
string
The string to repeat.
[n=0]
number
The number of times to repeat the string.
Returns
string
Returns the repeated string.
example
.repeat('',
3);
// => ''
.repeat('abc', 2);
// => 'abcabc'
.repeat('abc', 0);
// => ''
|
function repeat(string, n) {
var result = '';
string = baseToString(string);
n = +n;
if (n < 1 || !string || !nativeIsFinite(n)) {
return result;
}
|
|
Leverage the exponentiation by squaring algorithm for a faster repeat. See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. |
do {
if (n % 2) {
result += string;
}
n = nativeFloor(n / 2);
string += string;
} while (n);
return result;
}
|
|
Converts static
memberOf
category
String
Params
[string='']
string
The string to convert.
Returns
string
Returns the snake cased string.
example
.snakeCase('Foo
Bar');
// => 'foobar'
.snakeCase('fooBar');
// => 'foobar'
.snakeCase('--foo-bar');
// => 'foo_bar'
|
var snakeCase = createCompounder(function(result, word, index) {
return result + (index ? '_' : '') + word.toLowerCase();
});
|
|
Converts static
memberOf
category
String
Params
[string='']
string
The string to convert.
Returns
string
Returns the start cased string.
example
.startCase('--foo-bar');
//
=> 'Foo Bar'
_.startCase('fooBar');
// => 'Foo Bar'
.startCase('_foo_bar');
// => 'Foo Bar'
|
var startCase = createCompounder(function(result, word, index) {
return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1));
});
|
|
Checks if static
memberOf
category
String
Params
[string='']
string
The string to search.
[target]
string
The string to search for.
[position=0]
number
The position to search from.
Returns
boolean
Returns
true if string starts with target, else false.
example
.startsWith('abc',
'a');
// => true
.startsWith('abc', 'b');
// => false
.startsWith('abc', 'b', 1);
// => true
|
function startsWith(string, target, position) {
string = baseToString(string);
position = position == null
? 0
: nativeMin(position < 0 ? 0 : (+position || 0), string.length);
return string.lastIndexOf(target, position) == position;
}
|
|
Creates a compiled template function that can interpolate data properties
in "interpolate" delimiters, HTML-escape interpolated data properties in
"escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
properties may be accessed as free variables in the template. If a setting
object is provided it takes precedence over Note: In the development build For more information on precompiling templates see lodash's custom builds documentation. For more information on Chrome extension sandboxes see Chrome's extensions documentation. static
memberOf
category
String
Params
[string='']
string
The template string.
[options]
Object
The options object.
[options.escape]
RegExp
The HTML "escape" delimiter.
[options.evaluate]
RegExp
The "evaluate" delimiter.
[options.imports]
Object
An object to import into the template as free variables.
[options.interpolate]
RegExp
The "interpolate" delimiter.
[options.sourceURL]
string
The sourceURL of the template's compiled source.
[options.variable]
string
The data object variable name.
param-
Object
[otherOptions] Enables the legacy
options param signature.
Returns
Function
Returns the compiled template function.
example
//
using the "interpolate" delimiter to create a compiled template
var compiled = .template('hello <%= user %>!');
compiled({ 'user': 'fred' });
// => 'hello fred!'
// using the HTML "escape" delimiter to escape data property values
var compiled = .template('<%- value %>');
compiled({ 'value': ' |