Former-commit-id: 2e1e3b7e47b1f98d2ca20a89a4570a0b958d4323
Lo-Dash v0.3.1
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.
Download
- Development source
- Production source
- For optimal performance, create a custom build with only the features you need
Dive in
We’ve got API docs, benchmarks, and unit tests.
For a list of upcoming features, check out our roadmap.
Screencasts
For more information check out these screencasts over Lo-Dash:
Features
- 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
thisArgargument - _.indexOf and _.lastIndexOf accept a
fromIndexargument - _.partial for more functional fun
- _.size supports returning the
lengthof string values - _.template utilizes sourceURLs for easier debugging
Support
Lo-Dash has been tested in at least Chrome 5-19, Firefox 1.5-13, 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
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
backbonemodifier argument.
node build backbone
- Mobile builds, with IE bug fixes and method compilation removed, may be created using the
mobilemodifier argument.
node build mobile
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".
node build category=collections,functions
node build category="collections, functions"
- Use the
includeargument 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
excludeargument 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 and exlcude, may be combined.
node build backbone mobile category=functions include=pick,uniq
node build backbone mobile category=utilities exclude=first,last
Custom builds are saved to lodash.custom.js and lodash.custom.min.js.
Installation and usage
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);
});
Cloning this repo
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
Closed Underscore.js issues
- Allow iteration of objects with a
lengthproperty [#148, #154, #252, #448, test] - Ensure "Arrays" category methods allow falsey
arrayarguments [test] - Ensure array-like objects with invalid
lengthproperties are treated like regular objects [test, test, test] - Ensure
_(...)returns passed wrapper instances [test] - Ensure
_.groupByadds values to own, not inherited, properties [test] - Ensure
_.sortedIndexsupports arrays with highlengthvalues [test] - Ensure
_.throttleworks 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
undefinedvalues 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]
_.forEachshould be chainable [#142, test]_isNaN(new Number(NaN))should returntrue[test]_.reduceRightshould pass correct callback arguments when iterating objects [test]_.sizeshould return thelengthof string values [test]
Optimized methods (50+)
_.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_.times_.toArray_.union_.uniq,_.unique_.values_.without_.wrap_.zip- plus all
_(...)method wrappers
Changelog
v0.3.1
- Added
backbonebuild option - Ensured "Arrays" category methods allow falsey
arrayarguments - Removed
_.isArgumentsfallback from themobilebuild - Simplified
_.pluck,_.valuesand_(...)method wrappers
v0.3.0
- Added
categorybuild option - Added
fromIndexargument to_.indexOfand_.lastIndexOf - Added
//@ sourceURLsupport to_.template - Added
thisArgargument to_.sortedIndexand_.uniq - Added
_.forInand_.forOwnmethods - Ensured array-like objects with invalid
lengthproperties are treated like regular objects - Ensured
_.sortedIndexsupports arrays with highlengthvalues - Fixed
prototypeproperty iteration bug in_.keysfor Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1 - Optimized
_.timesandthisbindings in iterator methods
v0.2.2
- Added
mobilebuild option - Ensured
_.findreturnsundefinedfor unmatched values - Ensured
_.templateSettings.variableis compatible with Underscore.js - Optimized
_.escape - Reduced dependencies in
_.find
v0.2.1
- Adjusted the Lo-Dash export order for r.js
- Ensured
_.groupByvalues are added to own, not inherited, properties - Made
_.bindfollow ES5 spec to support a popular Backbone.js pattern - Removed the alias
intersect - Simplified
_.bind,_.flatten,_.groupBy,_.max, and_.min
v0.2.0
- Added custom build options
- Added default
_.templateSettings.variablevalue - 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
thisArgargument to_.groupBy - Added whitespace to compiled strings
- Added
_.partialmethod - Commented the
iterationFactoryoptions object - Ensured
_(...)returns passed wrapper instances - Ensured
_.maxand_.minsupport extremely large arrays - Ensured
_.throttleworks in tight loops - Fixed IE < 9
[DontEnum]bug and Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1’sprototypeproperty iteration bug - Inlined
_.isFunctioncalls. - Made
_.debounce’ed functions match_.throttle’ed functions’ return value behavior - Made
_.escapeno longer translate the ">" character - Fixed
clearTimeouttypo - 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
v0.1.0
- Initial release
BestieJS
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.