A drop-in replacement for Underscore.js, from the devs behind jsPerf.com, that delivers performance improvements, bug fixes, and additional features.
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
- Available on cdnjs thanks to CloudFlare
- For optimal performance, create a custom build with only the features you need
We’ve got API docs, benchmarks, and unit tests.
Create your own benchmarks at jsPerf, or search for existing ones.
For a list of upcoming features, check out our roadmap.
For more information check out these screencasts over Lo-Dash:
- Introducing Lo-Dash
- Optimizations and custom builds
- Lo-Dash’s origin and why it’s a better utility belt
- AMD loader support (RequireJS, curl.js, etc.)
- _.bind supports "lazy" binding
- _.debounce’ed functions match _.throttle’ed functions’ return value behavior
- _.forEach is chainable
- _.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
thisArg
argument - _.indexOf and _.lastIndexOf accept a
fromIndex
argument - _.partial for more functional fun
- _.size supports returning the
length
of string values - _.template utilizes sourceURLs for easier debugging
Lo-Dash has been tested in at least Chrome 5-19, Firefox 1.5-13, IE 6-9, Opera 9.25-12, Safari 3.0.4-5.1.3, Node.js 0.4.8-0.6.18, Narwhal 0.3.2, RingoJS 0.8, and Rhino 1.7RC3.
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
backbone
modifier argument.
node build backbone
- Legacy builds, tailored for older browsers without ES5 support, may be created using the
legacy
modifier argument.
node build legacy
- Mobile builds, with IE bug fixes and method compilation remov
8000
ed, may be created using the
mobile
modifier argument.
node build mobile
Custom builds may be created in three ways:
- Use the
category
argument to pass the categories of methods to include in the build.
Valid categories are "arrays", "chaining", "collections", "functions", "objects", and "utilities".
node build category=collections,functions
node build category="collections, functions"
- Use the
include
argument to pass the names of methods to include in the build.
node build include=each,filter,map
node build include="each, filter, map"
- Use the
exclude
argument to pass the names of methods to exclude from the build.
node build exclude=union,uniq,zip
node build exclude="union, uniq, zip"
All arguments, except include
with exclude
and mobile
with legacy
, may be combined.
node build backbone mobile category=functions include=pick,uniq
node build backbone legacy category=utilities exclude=first,last
Custom builds are saved to lodash.custom.js
and lodash.custom.min.js
.
In browsers:
<script src="lodash.js"></script>
or use the CDN:
<script src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/0.3.2/lodash.min.js"></script>
Using npm:
npm install lodash
In Node.js and RingoJS v0.8.0+:
var _ = require('lodash');
In Narwhal and RingoJS v0.7.0-:
var _ = require('lodash')._;
In Rhino:
load('lodash.js');
In an AMD loader like RequireJS:
require({
'paths': {
'underscore': 'path/to/lodash'
}
},
['underscore'], function(_) {
console.log(_.VERSION);
});
- Allow iteration of objects with a
length
property [#148, #154, #252, #448, #659, test] - Ensure "Arrays" category methods allow falsey
array
arguments [test] - Ensure array-like objects with invalid
length
properties are treated like regular objects [test, test, test] - Ensure
_(…)
returns passed wrapper instances [test] - Ensure
_.escape
returns an empty string when passednull
orundefined
[#407, test] - Ensure
_.groupBy
adds values to own, not inherited, properties [test] - Ensure
_.sortedIndex
supports arrays with highlength
values [test] - Ensure
_.throttle
works when called in tight loops [#502, test] - Fix Firefox, IE, Opera, and Safari object iteration bugs [#376, test, test, test, test, test, test]
- Handle arrays with
undefined
values correctly in IE < 9 [#601] - Methods should work on pages with incorrectly shimmed native methods [#7, test]
- Register as AMD module, but still export to global [#431, test]
_.forEach
should be chainable [#142, test]_isNaN(new Number(NaN))
should returntrue
[test]_.reduceRight
should pass correct callback arguments when iterating objects [test]_.size
should return thelength
of string values [test]
_.bind
_.bindAll
_.clone
_.compact
_.contains
,_.include
_.defaults
_.defer
_.difference
_.each
_.escape
_.every
,_.all
_.extend
_.filter
,_.select
_.find
,_.detect
_.flatten
_.forEach
,_.each
_.functions
,_.methods
_.groupBy
_.indexOf
_.intersection
_.invoke
_.isArguments
_.isDate
_.isEmpty
_.isEqual
_.isFinite
_.isFunction
_.isObject
_.isNumber
_.isRegExp
_.isString
_.keys
_.lastIndexOf
_.map
,_.collect
_.max
_.memoize
_.min
_.mixin
_.pick
_.pluck
_.reduce
,_.foldl
,_.inject
_.reject
_.result
_.shuffle
_.some
,_.any
_.sortBy
_.sortedIndex
_.template
_.throttle
_.times
_.toArray
_.union
_.uniq
,_.unique
_.values
_.without
_.wrap
_.zip
- plus all
_(…)
method wrappers
- Deprecated
_(…).chain
,_.isFinite
,_.isNaN
,_.isNull
,_.isUndefined
,_.result
, and_.size
- Ensured
_.escape
returns an empty string when passednull
orundefined
- Ensured
sourceURL
support doesn't cause errors in Adobe's JS engine. - Fixed regression in generating custom builds
- Moved
_.invoke
and_.pluck
back to the "Collections" category - Moved
_.tap
to the "Chaining" category
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.