An alternative to Underscore.js, delivering consistency, customization, performance, and extra features.
-
Lo-Dash builds:
Development and Production -
Underscore builds:
Development and Production -
CDN copies of ≤ v1.0.0-rc.2’s builds are available on cdnjs thanks to CloudFlare:
Lo-Dash development, Lo-Dash production, Underscore development, and Underscore production -
For optimal file size, 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
- Lo-Dash optimizations and custom builds
- Lo-Dash’s origin and why it’s a better utility belt
- Unit testing in Lo-Dash
- Lo-Dash’s approach to native method use
- CascadiaJS: Lo-Dash for a better utility belt
- AMD loader support (RequireJS, curl.js, etc.)
- _(…) supports intuitive chaining without calling _(…).chain
- _.bindKey for binding “lazy” defined methods
- _.clone supports “deep” cloning
- _.contains accepts a
fromIndex
argument - _.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
- _.isPlainObject checks if values are created by the
Object
constructor - _.merge for a “deep” _.extend
- _.partial for partial application without
this
binding - _.pick and _.omit accepts
callback
andthisArg
arguments - _.template supports ES6 template delimiters and utilizes sourceURLs for easier debugging
- _.contains, _.size, _.toArray, and more… accept strings
Lo-Dash has been tested in at least Chrome 523, Firefox 117, IE 6-10, Opera 9.25-12, Safari 3-6, Node.js 0.4.8-0.8.15, 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. To top it off, we handle all method dependency and alias mapping for you.
- Backbone builds, with only methods required by Backbone, may be created using the
backbone
modifier argument.
lodash backbone
- CSP builds, supporting default Content Security Policy restrictions, may be created using the
csp
modifier argument. Thecsp
modifier is an alais of themobile
modifier. Chrome extensions will require sandboxing or the use of either thecsp
,mobile
, orunderscore
build.
lodash csp
- Legacy builds, tailored for older browsers without ES5 support, may be created using the
legacy
modifier argument.
lodash legacy
- Mobile builds, with IE < 9 bug fixes and method compilation removed, may be created using the
mobile
modifier argument.
lodash mobile
- Strict builds, with
_.bindAll
,_.defaults
, and_.extend
in strict mode, may be created using thestrict
modifier argument.
lodash strict
- Underscore builds, tailored for projects already using Underscore, may be created using the
underscore
modifier argument.
lodash underscore
Custom builds may be created using the following commands:
- Use the
category
argument to pass comma separated categories of methods to include in the build.
Valid categories (case-insensitive) are “arrays”, “chaining”, “collections”, “functions”, “objects”, and “utilities”.
lodash category=collections,functions
lodash category="collections, functions"
- Use the
exports
argument to pass comma separated names of ways to export theLoDash
function.
Valid exports are “amd”, “commonjs”, “global”, “node”, and “none”.
lodash exports=amd,commonjs,node
lodash exports="amd, commonjs, node"
- Use the
iife
argument to specify code to replace the immediately-invoked function expression that wraps Lo-Dash.
lodash iife="!function(window,undefined){%output%}(this)"
- Use the
include
argument to pass comma separated method/category names to include in the build.
lodash include=each,filter,map
lodash include="each, filter, map"
- Use the
minus
argument to pass comma separated method/category names to remove from those included in the build.
lodash underscore minus=result,shuffle
lodash underscore minus="result, shuffle"
- Use the
plus
argument to pass comma separated method/category names to add to those included in the build.
lodash backbone plus=random,template
lodash backbone plus="random, template"
- Use the
template
argument to pass the file path pattern used to match template files to precompile.
lodash template="./*.jst"
- Use the
settings
argument to pass the template settings used when precompiling templates.
lodash settings="{interpolate:/\\{\\{([\\s\\S]+?)\\}\\}/g}"
- Use the
moduleId
argument to specify the AMD module ID of Lo-Dash, which defaults to “lodash”, used by precompiled templates.
lodash moduleId="underscore"
All arguments, except legacy
with csp
or mobile
, may be combined.
Unless specified by -o
or --output
, all files created are saved to the current working directory.
The following options are also supported:
-c
,--stdout
Write output to standard output-d
,--debug
Write only the debug output-h
,--help
Display help information-m
,--minify
Write only the minified output-o
,--output
Write output to a given path/filename-s
,--silent
Skip status updates normally logged to the console-V
,--version
Output current version of Lo-Dash
The lodash
command-line utility is available when Lo-Dash is installed as a global package (i.e. npm install -g lodash
).
In browsers:
<script src="lodash.js"></script>
Using npm
:
npm install lodash
npm install -g lodash
npm link lodash
To avoid potential issues, update npm
before installing Lo-Dash:
npm install npm -g
In Node.js and RingoJS v0.8.0+:
var _ = require('lodash');
// or as a drop-in replacement for Underscore
var _ = require('lodash/lodash.underscore');
Note: If Lo-Dash is installed globally, run npm link lodash
in your project’s root directory before requiring it.
In 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 [#799, test] - Fix cross-browser object iteration bugs [#60, #376, test]
- Methods should work on pages with incorrectly shimmed native methods [#7, #742, test]
_.isEmpty
should support jQuery/MooTools DOM query collections [#690, test]_.isObject
should avoid V8 bug #2291 [#605, test]_.keys
should work witharguments
objects cross-browser [#396, test]_.range
should coerce arguments to numbers [#634, #683, test]
- Specified more method chaining behaviors
- Updated
underscore
build compatibility to v1.4.3
- Made
_(…)
chain automatically without needing to call_#chain
- Made
_.isEqual
equatearguments
objects to similarObject
objects - Made
_.clone
copy the enumerable properties ofarguments
objects and objects
created by constructors other thanObject
are cloned to plainObject
objects
- Ensure Lo-Dash runs in the JS engine embedded in Adobe products
- Ensured
_.reduce
and_.reduceRight
pass the correct number ofcallback
arguments - Ensured
_.throttle
nulls thetimeoutId
- Made deep
_.clone
more closely follow the structured clone algorithm and copy array properties assigned byRegExp#exec
- Optimized compiled templates in Firefox
- Optimized
_.forEach
,_.forOwn
,_.isNumber
, and_.isString
- Simplified
iteratorTemplate
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.