Former-commit-id: 1b32a93390d9b806bd66a298d558e68588ba7574
Lo-Dash v0.3.2
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 faster serving, use cdn js' cloud hosted v0.3.2 file here, thanks to CloudFlare!
- For optimal performance, create a custom build with only the features you need
Dive in
We’ve got API docs, benchmarks, and unit tests.
You can create your own benchmark at jsPerf, and search for existing tests named "lo-dash" & "lodash"
For a list of upcoming features, check out our roadmap.
Screencasts
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 the better utility belt
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-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
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>
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);
});
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
_.escapereturns an empty string when passednullorundefined[#407, 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
Release Notes
v0.3.2
- Deprecated
_(…).chain,_.isFinite,_.isNaN,_.isNull,_.isUndefined,_.result, and_.size - Ensured
_.escapereturns an empty string when passednullorundefined - Ensured
sourceURLsupport doesn't cause errors in Adobe's JS engine. - Fixed regression in generating custom builds
- Moved
_.invokeand_.pluckback to the "Collections" category - Moved
_.tapto the "Chaining" category
The full changelog is available here.
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.