Lo-Dash’s performance is gained by avoiding slower native methods, instead opting for simplified non-ES5 compliant methods optimized for common usage, and by leveraging function compilation to reduce the number of overall function calls.
- Development source
- Production source
- CDN copies of ≤ v0.6.1 are available on cdnjs thanks to CloudFlare
- For optimal performance, create a custom build with only the features you need
For a list of upcoming features, check out our roadmap.
For more information check out these screencasts over Lo-Dash:
- Introducing Lo-Dash
- Lo-Dash optimizations and custom builds
- Lo-Dash’s origin and why it’s a better utility belt
- Unit testing in Lo-Dash
- AMD loader support (RequireJS, curl.js, etc.)
- _.bind supports “lazy” binding
- _.clone supports “deep” cloning
- .countBy as a companion function for .groupBy and _.sortBy
- .debounce’ed functions match .throttle’ed functions’ return value behavior
- .drop for the inverse functionality of .pick
- _.forEach is chainable and supports exiting iteration early
- _.forIn for iterating over an object’s own and inherited properties
- _.forOwn for iterating over an object’s own properties
- .groupBy, .sortedIndex, and _.uniq accept a
- .indexOf and .lastIndexOf accept a
- .merge for a “deep” .extend
- _.partial for partial application without
- .pick and .drop accept
- _.sortBy performs a stable sort
- _.template utilizes sourceURLs for easier debugging
- .unescape to unescape strings escaped by .escape
- _.where for filtering collections by contained properties
- _.zipObject for composing objects
- .contains, .size, _.toArray, and more… accept strings
Lo-Dash has been tested in at least Chrome 5-21, Firefox 1-15, IE 6-9, Opera 9.25-12, Safari 3-6, Node.js 0.4.8-0.8.8, Narwhal 0.3.2, RingoJS 0.8, and Rhino 1.7RC5.
Custom builds make it easy to create lightweight versions of Lo-Dash containing only the methods you need. We handle all the method dependency and alias mapping for you.
- Backbone builds, containing all methods required by Backbone, may be created using the
- CSP builds, supporting default Content Security Policy restrictions, may be created using the
- Legacy builds, tailored for older browsers without ES5 support, may be created using the
- Mobile builds, with IE < 9 bug fixes and method compilation removed, may be created using the
- Strict builds, with
_.extendin strict mode, may be created using the
- Underscore builds, containing only methods included in Underscore, may be created using the
Custom builds may be created in three ways:
- Use the
categoryargument to pass the categories of methods to include in the build.
Valid categories are “arrays”, “chaining”, “collections”, “functions”, “objects”, and “utilities”.
lodash category=collections,functionslodash category="collections, functions"
- Use the
excludeargument to pass the names of methods to exclude from the build.
lodash exclude=union,uniq,ziplodash exclude="union, uniq, zip"
- Use the
includeargument to pass the names of methods to include in the build.
lodash include=each,filter,maplodash include="each, filter, map"
All arguments, except
mobile, may be combined.
lodash backbone legacy category=utilities exclude=first,lastlodash underscore mobile strict category=functions include=pick,uniq
lodash command-line utility is available when Lo-Dash is installed as a global package (i.e.
npm install -g lodash).
Custom builds are saved to
Installation and usage
npm install lodashnpm install -g lodash
var _ = ;
In RingoJS v0.7.0-:
var _ = _;
In an AMD loader like RequireJS:
Resolved Underscore.js issues (30+)
- Allow iteration of objects with a
lengthproperty [#148, #154, #252, #448, #659, test]
- Ensure array-like objects with invalid
lengthproperties are treated like regular objects [test]
- Ensure “Arrays”, “Collections”, and “Objects” methods don’t error when passed falsey arguments [#650, test]
- Ensure “Collections” methods allow string
collectionarguments [#247, #276, #561, test]
- Ensure templates compiled with errors are inspectable [#666, test]
- Fix cross-browser object iteration bugs [#60, #376, test]
- Handle arrays with
undefinedvalues correctly in IE < 9 [#601]
- Methods should work on pages with incorrectly shimmed native methods [#7, test]
- Register as an AMD module, but still export to global [#431, test]
_(…)should return passed wrapper instances [test]
deepcloning [#595, test]
_.containsshould work with strings [#667, test]
_.groupByshould only add values to own, not inherited, properties [test]
_.escapeshould return an empty string when passed
_.extendshould recursively extend objects [#379, #718, test]
_.forEachshould be chainable [#142, test]
_.forEachshould allow exiting iteration early [#211, test]
_.isElementshould use strict equality for its duck type check [test]
_.sizeshould support jQuery/MooTools DOM query collections [#690, test]
truefor like-objects from different documents [test]
_.isObjectshould avoid V8 bug #2291 [#605, test]
_.isNaN(new Number(NaN))should return
_.sizeshould work with
argumentsobjects cross-browser [#396, #653, test]
_.onceshould free the given function for garbage collection [#693]
_.rangeshould coerce arguments to numbers [#634, #683, test]
_.reduceRightshould pass correct callback arguments when iterating objects [test]
_.sizeshould return the
lengthof string values [test]
_.sortedIndexshould support arrays with high
_.templateshould not augment the
_.throttleshould work when called in a loop [#502, test]
toArraymethods of arrays and strings [test]
_.zipObjectshould accept less than two arguments [test]
Optimized methods (50+)
- plus all
- Ensured IE conditional compilation isn’t enabled by the
hasObjectSpliceBugtest to avoid
- Added _.unescape
_.reduceworks with string objects in IE < 9
- Made compiled methods take advantage of engines with strict mode optimizations
_.intersectionand removed its dependency on
- Reduced the file size of the
The full changelog is available here.
Lo-Dash is part of the BestieJS “Best in Class” module collection. This means we promote solid browser/environment support, ES5 precedents, unit testing, and plenty of documentation.