Calling _(value) returns a lodash wrapper instance around value. This is the closest thing lodash has to a public class: a constructor function, an instance it produces, and instance methods on that instance's prototype. Every other lodash method in this reference (map, filter, merge, and the rest) is also available as a chainable instance method on this wrapper — see the constructor entry below for the full list of which methods are chainable by default.
_([1, 2, 3]).map(n => n * 2).filter(n => n > 2).value();
// => [4, 6]_(value)
Creates a lodash object which wraps value to enable implicit method chain sequences. Methods that operate on and return arrays, collections, and functions can be chained together. Methods that retrieve a single value or may return a primitive value will automatically end the chain sequence and return the unwrapped value. Otherwise, the value must be unwrapped with _#value.
Explicit chain sequences, which must be unwrapped with _#value, may be enabled using chain.
The execution of chained methods is lazy, that is, it's deferred until _#value is implicitly or explicitly called.
Lazy evaluation allows several methods to support shortcut fusion. Shortcut fusion is an optimization to merge iteratee calls; this avoids the creation of intermediate arrays and can greatly reduce the number of iteratee executions. Sections of a chain sequence qualify for shortcut fusion if the section is applied to an array and iteratees accept only one argument. The heuristic for whether a section qualifies for shortcut fusion is subject to change.
Chaining is supported in custom builds as long as the _#value method is directly or indirectly included in the build.
In addition to lodash methods, wrappers have Array and String methods.
The wrapper Array methods are: concat, join, pop, push, shift, sort, splice, and unshift
The wrapper String methods are: replace and split
The wrapper methods that support shortcut fusion are: at, compact, drop, dropRight, dropWhile, filter, find, findLast, head, initial, last, map, reject, reverse, slice, tail, take, takeRight, takeRightWhile, takeWhile, and toArray
The chainable wrapper methods are: after, ary, assign, assignIn, assignInWith, assignWith, at, before, bind, bindAll, bindKey, castArray, chain, chunk, commit, compact, concat, conforms, constant, countBy, create, curry, debounce, defaults, defaultsDeep, defer, delay, difference, differenceBy, differenceWith, drop, dropRight, dropRightWhile, dropWhile, extend, extendWith, fill, filter, flatMap, flatMapDeep, flatMapDepth, flatten, flattenDeep, flattenDepth, flip, flow, flowRight, fromPairs, functions, functionsIn, groupBy, initial, intersection, intersectionBy, intersectionWith, invert, invertBy, invokeMap, iteratee, keyBy, keys, keysIn, map, mapKeys, mapValues, matches, matchesProperty, memoize, merge, mergeWith, method, methodOf, mixin, negate, nthArg, omit, omitBy, once, orderBy, over, overArgs, overEvery, overSome, partial, partialRight, partition, pick, pickBy, plant, property, propertyOf, pull, pullAll, pullAllBy, pullAllWith, pullAt, push, range, rangeRight, rearg, reject, remove, rest, reverse, sampleSize, set, setWith, shuffle, slice, sort, sortBy, splice, spread, tail, take, takeRight, takeRightWhile, takeWhile, tap, throttle, thru, toArray, toPairs, toPairsIn, toPath, toPlainObject, transform, unary, union, unionBy, unionWith, uniq, uniqBy, uniqWith, unset, unshift, unzip, unzipWith, update, updateWith, values, valuesIn, without, wrap, xor, xorBy, xorWith, zip, zipObject, zipObjectDeep, and zipWith
The wrapper methods that are not chainable by default are: add, attempt, camelCase, capitalize, ceil, clamp, clone, cloneDeep, cloneDeepWith, cloneWith, conformsTo, deburr, defaultTo, divide, each, eachRight, endsWith, eq, escape, escapeRegExp, every, find, findIndex, findKey, findLast, findLastIndex, findLastKey, first, floor, forEach, forEachRight, forIn, forInRight, forOwn, forOwnRight, get, gt, gte, has, hasIn, head, identity, includes, indexOf, inRange, invoke, isArguments, isArray, isArrayBuffer, isArrayLike, isArrayLikeObject, isBoolean, isBuffer, isDate, isElement, isEmpty, isEqual, isEqualWith, isError, isFinite, isFunction, isInteger, isLength, isMap, isMatch, isMatchWith, isNaN, isNative, isNil, isNull, isNumber, isObject, isObjectLike, isPlainObject, isRegExp, isSafeInteger, isSet, isString, isUndefined, isTypedArray, isWeakMap, isWeakSet, join, kebabCase, last, lastIndexOf, lowerCase, lowerFirst, lt, lte, max, maxBy, mean, meanBy, min, minBy, multiply, noConflict, noop, now, nth, pad, padEnd, padStart, parseInt, pop, random, reduce, reduceRight, repeat, result, round, runInContext, sample, shift, size, snakeCase, some, sortedIndex, sortedIndexBy, sortedLastIndex, sortedLastIndexBy, startCase, startsWith, stubArray, stubFalse, stubObject, stubString, stubTrue, subtract, sum, sumBy, template, times, toFinite, toInteger, toJSON, toLength, toLower, toNumber, toSafeInteger, toString, toUpper, trim, trimEnd, trimStart, truncate, unescape, uniqueId, upperCase, upperFirst, value, and words
| Parameter | Type | Description |
|---|---|---|
value | any | The value to wrap in a lodash instance. |
Returns Object — Returns the new lodash wrapper instance.
function square(n) {
return n * n;
}
var wrapped = _([1, 2, 3]);
// Returns an unwrapped value.
wrapped.reduce(_.add);
// => 6
// Returns a wrapped value.
var squares = wrapped.map(square);
_.isArray(squares);
// => false
_.isArray(squares.value());
// => true_.chain(value)
Available since v1.3.0.
Creates a lodash wrapper instance that wraps value with explicit method chain sequences enabled. The result of such sequences must be unwrapped with _#value.
| Parameter | Type | Description |
|---|---|---|
value | any | The value to wrap. |
Returns Object — Returns the new lodash wrapper instance.
var users = [
{ 'user': 'barney', 'age': 36 },
{ 'user': 'fred', 'age': 40 },
{ 'user': 'pebbles', 'age': 1 }
];
var youngest = _
.chain(users)
.sortBy('age')
.map(function(o) {
return o.user + ' is ' + o.age;
})
.head()
.value();
// => 'pebbles is 1'_.tap(value, interceptor)
Available since v0.1.0.
This method invokes interceptor and returns value. The interceptor is invoked with one argument; (value). The purpose of this method is to "tap into" a method chain sequence in order to modify intermediate results.
| Parameter | Type | Description |
|---|---|---|
value | any | The value to provide to interceptor. |
interceptor | Function | The function to invoke. |
Returns any — Returns value.
_([1, 2, 3])
.tap(function(array) {
// Mutate input array.
array.pop();
})
.reverse()
.value();
// => [2, 1]_.thru(value, interceptor)
Available since v3.0.0.
This method is like _.tap except that it returns the result of interceptor. The purpose of this method is to "pass thru" values replacing intermediate results in a method chain sequence.
| Parameter | Type | Description |
|---|---|---|
value | any | The value to provide to interceptor. |
interceptor | Function | The function to invoke. |
Returns any — Returns the result of interceptor.
_(' abc ')
.chain()
.trim()
.thru(function(value) {
return [value];
})
.value();
// => ['abc']_.prototype[Symbol.iterator]()
Available since v4.0.0.
Enables the wrapper to be iterable.
Returns Object — Returns the wrapper object.
var wrapped = _([1, 2]);
wrapped[Symbol.iterator]() === wrapped;
// => true
Array.from(wrapped);
// => [1, 2]_.prototype.at([paths])
Available since v1.0.0.
This method is the wrapper version of _.at.
Returns Object — Returns the new lodash wrapper instance.
var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
_(object).at(['a[0].b.c', 'a[1]']).value();
// => [3, 4]_.prototype.chain()
Available since v0.1.0.
Creates a lodash wrapper instance with explicit method chain sequences enabled.
Returns Object — Returns the new lodash wrapper instance.
var users = [
{ 'user': 'barney', 'age': 36 },
{ 'user': 'fred', 'age': 40 }
];
// A sequence without explicit chaining.
_(users).head();
// => { 'user': 'barney', 'age': 36 }
// A sequence with explicit chaining.
_(users)
.chain()
.head()
.pick('user')
.value();
// => { 'user': 'barney' }_.prototype.commit()
Available since v3.2.0.
Executes the chain sequence and returns the wrapped result.
Returns Object — Returns the new lodash wrapper instance.
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]_.prototype.next()
Available since v4.0.0.
Gets the next value on a wrapped object following the iterator protocol.
Returns Object — Returns the next iterator value.
var wrapped = _([1, 2]);
wrapped.next();
// => { 'done': false, 'value': 1 }
wrapped.next();
// => { 'done': false, 'value': 2 }
wrapped.next();
// => { 'done': true, 'value': undefined }_.prototype.plant(value)
Available since v3.2.0.
Creates a clone of the chain sequence planting value as the wrapped value.
| Parameter | Type | Description |
|---|---|---|
value | any | The value to plant. |
Returns Object — Returns the new lodash wrapper instance.
function square(n) {
return n * n;
}
var wrapped = _([1, 2]).map(square);
var other = wrapped.plant([3, 4]);
other.value();
// => [9, 16]
wrapped.value();
// => [1, 4]_.prototype.reverse()
Available since v0.1.0.
This method is the wrapper version of _.reverse.
Note: This method mutates the wrapped array.
Returns Object — Returns the new lodash wrapper instance.
var array = [1, 2, 3];
_(array).reverse().value()
// => [3, 2, 1]
console.log(array);
// => [3, 2, 1]_.prototype.value()
Available since v0.1.0. Alias: _.prototype.toJSON, prototype.valueOf.
Executes the chain sequence to resolve the unwrapped value.
Returns any — Returns the resolved unwrapped value.
_([1, 2, 3]).value();
// => [1, 2, 3]