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.
We’ve got API docs and unit tests.
For a list of upcoming features, check out our roadmap.
For more information check out these screencasts over Lo-Dash:
- AMD loader support
- _.bind supports "lazy" binding
- _.debounce’ed functions match _.throttle’ed functions’ return value behavior
- _.forEach is chainable
- _.groupBy accepts a third,
thisArg
, argument - _.partial for more functional fun
- _.size supports returning the
length
of string values
Lo-Dash has been tested in at least Chrome 5-19, Firefox 1.5-12, IE 6-9, Opera 9.25-11.64, 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.
Custom builds may be created in two ways:
- Use the
include
argument to pass the names of the methods to include in the build.
node build include=each,filter,map,noConflict
node build include="each, filter, map, noConflict"
- Use the
exclude
argument to pass the names of the methods to exclude from the build.
node build exclude=isNaN,isUndefined,union,zip
node build exclude="isNaN, isUndefined, union, zip"
Custom builds are saved to lodash.custom.js
and lodash.custom.min.js
.
In browsers:
<script src="lodash.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);
});
To clone this repository including all submodules, using Git 1.6.5 or later:
git clone --recursive https://github.com/bestiejs/lodash.git
cd lodash.js
For older Git versions, just use:
git clone https://github.com/bestiejs/lodash.git
cd lodash
git submodule update --init
- Ensure
_.groupBy
adds values to own, not inherited, properties [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
_.isEmpty
_.isEqual
_.isFinite
_.isObject
_.isString
_.keys
_.lastIndexOf
_.map
,_.collect
_.max
_.memoize
_.min
_.mixin
_.pick
_.pluck
_.reduce
,_.foldl
,_.inject
_.reject
_.result
_.shuffle
_.some
,_.any
_.sortBy
_.sortedIndex
_.template
_.throttle
_.toArray
_.union
_.uniq
,_.unique
_.values
_.without
_.wrap
_.zip
- plus all
_(...)
method wrappers
- Adjusted the Lo-Dash export order for r.js
- Ensured
_.groupBy
values are added to own, not inherited, properties - Made
_.bind
follow ES5 spec to support a popular Backbone.js pattern - Removed the alias
intersect
- Simplified
_.bind
,_.flatten
,_.groupBy
,_.max
, and_.min
- Added custom build options
- Added default
_.templateSettings.variable
value - Added "lazy bind" support to
_.bind
- Added native method overwrite detection to avoid bad native shims
- Added support for more AMD build optimizers and aliasing as the "underscore" module
- Added
thisArg
argument to_.groupBy
- Added whitespace to compiled strings
- Added
_.partial
method - Commented the
iterationFactory
options object - Ensured
_.max
and_.min
support extremely large arrays - Ensured
_.throttle
works in tight loops - Fixed IE < 9
[DontEnum]
bug and Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1’s prototype property iteration bug - Inlined
_.isFunction
calls. - Made
_.debounce
’ed functions match_.throttle
’ed functions’ return value behavior - Made
_.escape
no longer translate the ">" character - Fixed
clearTimeout
typo - Simplified all methods in the "Arrays" category
- Optimized
_.debounce
,_.escape
,_.flatten
,_.forEach
,_.groupBy
,_.intersection
,_.invoke
,_.isObject
,_.max
,_.min
,_.pick
,_.shuffle
,_.sortedIndex
,_.template
,_.throttle
,_.union
,_.uniq
- Initial release
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.