A utility library delivering consistency, customization, performance, & extras.
Review the build differences & pick the one that’s right for you.
- Modern build (minified)
For new environments like Chrome, Firefox, IE ≥ 9, & Safari ≥ 5.1 - Compatibility build (minified)
For new & old environments like IE ≤ 8 & PhantomJS - Underscore build (minified)
A drop-in replacement for Underscore v1.6.0
CDN copies are available on cdnjs & jsDelivr.
Create custom builds with only the features you need.
Love modules? We’ve got you covered with lodash-amd, lodash-node, & npm packages per method.
Check out our unit tests, benchmarks, changelog, roadmap, as well as community created podcasts, posts, & videos.
In a browser:
<script src="lodash.js"></script>
In an AMD loader:
require(['lodash'], function(_) {/*…*/});
Using npm:
$ npm i --save lodash
$ {sudo -H} npm i -g lodash
$ npm ln lodash
In Node.js:
// the default modern build
var _ = require('lodash');
// or the compat build
var _ = require('lodash-compat');
// or a specific method
var clone = require('lodash/lang/clone');
var keysIn = require('lodash-compat/object/keysIn');
Note:
Don’t assign values to the special variable _
when in the REPL.
Install n_ for a version of the REPL that includes Lo-Dash by default.
- ~100% code coverage
- Module bundles for AMD, ES6, & Node.js as well as npm packages
- Follows semantic versioning for releases
- Deferred chaining & lazy evaluation
- _(…) supports intuitive chaining
- _.ary & _.rearg to change function argument limits & order
- _.at for cherry-picking collection values
- _.attempt to execute functions which may error without a try-catch
- _.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
- _.create for easier object inheritance
- _.curry & _.curryRight for creating curried functions
- _.debounce & _.throttle are cancelable & accept options for more control
- _.findIndex & _.findKey for finding indexes & keys
- _.flow to complement _.flowRight (a.k.a
_.compose
) - _.forEach supports exiting early
- _.forIn for iterating all enumerable properties
- _.forOwn for iterating own properties
- _.includes accepts a
fromIndex
- _.isError to check for error objects
- _.isNative to check for native functions
- _.isPlainObject to check for objects created by
Object
- _.keysIn & _.valuesIn for getting keys & values of all enumerable properties
- _.mapValues for mapping values to an object
- _.merge for a deep _.extend
- _.parseInt for consistent behavior
- _.pull, _.pullAt, & _.remove for mutating arrays
- _.random supports returning floating-point numbers
- _.runInContext for collisionless mixins & easier mocking
- _.slice for creating subsets of array-like values
- _.sortBy supports sorting by multiple properties
- _.support for flagging environment features
- _.template supports “imports” options & ES6 template delimiters
- _.transform as a powerful alternative to _.reduce for transforming objects
- _.thru to pass values thru method chains
- _.where supports deep object comparisons
- _.xor to complement _.difference, _.intersection, & _.union
- _.bind, _.curry, _.partial, & more support argument placeholders
- _.capitalize, _.trim, & more string methods
- _.clone, _.isEqual, & more accept callbacks
- _.dropWhile, _.takeWhile, & more to complement _.first, _.initial, _.last, & _.rest
- _.findLast, _.findLastIndex, & more right-associative methods
- _.includes, _.toArray, & more accept strings
Tested in Chrome (19, 38-39), Firefox (3, 20, 33-34), IE 6-11, Opera 25-26, Safari 5-8, Node.js 0.8.26~0.10.33, PhantomJS 1.9.7, RingoJS 0.9, & Rhino 1.7RC5.
Automated browser test runs are available as well as CI runs for lodash, lodash-cli, lodash-amd, lodash-node, & grunt-lodash. Special thanks to Sauce Labs for providing automated browser testing.
John-David Dalton |
Benjamin Tan | Blaine Bublitz | Kit Cambridge | Mathias Bynens |