_.where.
Former-commit-id: 5247bba20d7aa772867e29def99221faea376db1
Lo-Dash v0.4.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
- CDN copies of ≤ v0.4.2 are available on cdnjs 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.
Create your own benchmarks at jsPerf, or search for existing ones.
For a list of upcoming features, check out our roadmap.
Screencasts
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
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
- _.template utilizes sourceURLs for easier debugging
- _.contains, _.size, _.toArray, and more… accept strings
Support
Lo-Dash has been tested in at least Chrome 5-20, Firefox 1.5-13, IE 6-9, Opera 9.25-12, Safari 3.0.4-5.1.7, Node.js 0.4.8-0.8.2, 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.
lodash backbone
- Legacy builds, tailored for older browsers without ES5 support, may be created using the
legacymodifier argument.
lodash legacy
- Mobile builds, with IE < 9 bug fixes and method compilation removed, may be created using the
mobilemodifier argument.
lodash mobile
- Strict builds, with
_.bindAll,_.defaults, and_.extendin strict mode, may be created using thestrictmodifier argument.
lodash strict
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".
lodash category=collections,functions
lodash category="collections, functions"
- Use the
excludeargument to pass the names of methods to exclude from the build.
lodash exclude=union,uniq,zip
lodash exclude="union, uniq, zip"
- Use the
includeargument to pass the names of methods to include in the build.
lodash include=each,filter,map
lodash include="each, filter, map"
All arguments, except exclude with include and legacy with mobile, may be combined.
lodash backbone legacy category=utilities exclude=first,last
lodash backbone mobile strict category=functions include=pick,uniq
The lodash command-line utility is available when Lo-Dash is installed as a global package (i.e. npm install -g lodash).
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
npm install -g lodash
In Node.js and RingoJS v0.8.0+:
var _ = require('lodash');
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);
});
Closed Underscore.js issues (20+)
- Allow iteration of objects with a
lengthproperty [#148, #154, #252, #448, #659, test] - Ensure array-like objects with invalid
lengthproperties are treated like regular objects [test, test, test] - Ensure "Arrays" methods allow falsey
arrayarguments [test] - Ensure "Collections" methods allow string
collectionarguments [#247, #276, #561, test, test, test, test] - Ensure templates compiled with errors are inspectable [#666, test]
- Fix cross-browser object iteration bugs [#60, #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 an AMD module, but still export to global [#431, test]
_(…)should return passed wrapper instances [test]_.containsshould work with strings [#667, test]_.escapeshould return an empty string when passednullorundefined[#407, test]_.forEachshould be chainable [#142, test]_.groupByshould add values to own, not inherited, properties [test]_isNaN(new Number(NaN))should returntrue[test]_.reduceRightshould pass correct callback arguments when iterating objects [test]_.sizeshould return thelengthof string values [test]_.sizeshouldn't error on falsey values [#650, test]_.sizeshould work withargumentsobjects cross-browser [#653, test]_.sortedIndexshould support arrays with highlengthvalues [test]_.templateshould not augment theoptionsobject [test]_.throttleshould work when called in a loop [#502, test]_.zipObjectshould accept less than two arguments [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_.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
Release Notes
v0.4.2
- Added
strictbuild - Ensured
_.bindAll,_.defaults, and_.extendavoid strict mode errors when attempting to augment read-only properties - Optimized the iteration of large arrays in
_.difference,_.intersection, and_.without - Fixed build bugs related to removing variables
v0.4.1
- Fixed
_.templateregression - Optimized build process to detect and remove more unused variables
v0.4.0
- Added
binandscriptsentries to package.json - Added
legacybuild option - Added cross-browser support for passing strings to "Collections" methods
- Added
_.zipObject - Leveraged
_.indexOf'sfromIndexin_.differenceand_.without - Optimized compiled templates
- Optimized inlining the
iteratorTemplatefor builds - Optimized object iteration for "Collections" methods
- Optimized partially applied
_.bindin V8 - Made compiled templates more debuggable
- Made
_.sizework with falsey values and consistent cross-browser withargumentsobjects - Moved
_.groupByand_.sortByback to the "Collections" category - Removed
argumentsobject from_.range
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.