A modern JavaScript utility library delivering modularity, performance, & extras.
_.assign({ 'a': 1 }, { 'b': 2 }, { 'c': 3 });
// → { 'a': 1, 'b': 2, 'c': 3 }
_.map([1, 2, 3], function(n) { return n * 3; });
// → [3, 6, 9]
The most depended on npm package with over a billion downloads!
Documentation
Download
Lodash is released under the MIT license & supports modern environments.
Review the build differences & pick the one that’s right for you.
Lodash is available in a variety of other builds & module formats.
CDN copies are available on cdnjs & jsDelivr.
Create custom builds with only the features you need.
Further Reading
Installation
In a browser:
<script src="lodash.js"></script>
In an AMD loader:
require(['lodash'], function(_) {});
Using npm:
$ {sudo -H} npm i -g npm
$ npm i --save lodash
In Node.js:
// load the full build
var _ = require('lodash');
// load the core build
var _ = require('lodash/core');
// load the fp build for immutable auto-curried iteratee-first data-last methods
var _ = require('lodash/fp');// or a method category
var array = require('lodash/array');
var array = require('lodash/fp/object');// or method for smaller builds with browserify/rollup/webpack
var chunk = require('lodash/chunk');
var extend = require('lodash/fp/extend');
See the package source for more details.
Note:
Don’t assign values to the special variable “_
” when in the REPL.
Install n_ for a REPL that includes lodash by default.
Features
- ~100% code coverage
- Follows semantic versioning for releases
- Lazily evaluated chaining
- _(…) supports implicit chaining
- _.ary & _.rearg to change function argument limits & order
- _.at for cherry-picking collection values
- _.attempt to execute functions which may error
- _.before to complement _.after
- _.bindKey for binding “lazy” defined methods
- _.chunk for splitting an array into chunks of a given size
- _.clone supports shallow cloning of
Date
& RegExp
objects
- _.cloneDeep for deep cloning arrays & objects
- _.curry & _.curryRight for creating curried functions
- _.debounce & _.throttle are cancelable & accept options for more control
- _.defaultsDeep for recursively assigning default properties
- _.fill to fill arrays with values
- _.findKey for finding keys
- _.flow to complement _.flowRight (a.k.a
_.compose
)
- _.forEach supports exiting early
- _.forIn for iterating all enumerable properties
- _.forOwn for iterating own properties
- _.get & _.set for deep property getting & setting
- _.gt, _.gte, _.lt, & _.lte relational methods
- _.inRange for checking whether a number is within a given range
- _.isNative to check for native functions
- _.isPlainObject & _.toPlainObject to check for & convert to
Object
objects
- _.isTypedArray to check for typed arrays
- _.mapKeys for mapping keys to an object
- _.matches supports deep object comparisons
- _.matchesProperty to complement _.matches & _.property
- _.merge for a deep _.extend
- _.method & _.methodOf to create functions that invoke methods
- _.orderBy for sorting by multiple properties & orders
- _.overArgs for more advanced functional composition
- _.parseInt for consistent cross-environment behavior
- _.pull, _.pullAt, & _.remove for mutating arrays
- _.random supports returning floating-point numbers
- _.rest & _.spread for applying rest parameters & spreading arguments to functions
- _.runInContext for collisionless mixins & easier mocking
- _.slice for creating subsets of array-like values
- _.template supports “imports” options & ES template delimiters
- _.transform as a powerful alternative to _.reduce for transforming objects
- _.unzipWith & _.zipWith to specify how grouped values should be combined
- _.valuesIn for getting values of all enumerable properties
- _.xor to complement _.difference, _.intersection, & _.union
- _.add, _.round, _.sum, & more math methods
- _.bind, _.curry, _.partial, & more support customizable argument placeholders
- _.capitalize, _.trim, & more string methods
- _.clone, _.isEqual, & more accept customizer callbacks
- _.dropWhile, _.takeWhile, & more to complement _.first, _.initial, _.last, & _.rest
- _.findLast, _.findLastKey, & more right-associative methods
- _.includes, _.toArray, & more accept strings
- _#commit & _#plant for working with chain sequences
- _#thru to pass values thru a chain sequence
Support
Tested in Chrome 47-48, Firefox 43-44, IE 9-11, Edge 13, Safari 8-9, Node.js 0.10, 0.12, 4, & 5, & PhantomJS 1.9.8.
Automated browser & CI test runs are available.