What is lodash?
Lodash is a JavaScript library that provides utility functions for common programming tasks using a functional programming paradigm. It includes functions for manipulating and traversing arrays, objects, and strings, as well as utilities for functions, language, math, number, object, sequence, and utility methods.
What are lodash's main functionalities?
Array Manipulation
Lodash provides a rich set of array manipulation functions such as map, filter, find, and sort. The code sample demonstrates sorting an array in ascending order using a custom comparator.
[3, 2, 1].sort(_.compareWith(function(a, b) { return a - b; }))
Object Manipulation
Lodash allows for easy manipulation and traversal of objects. The code sample shows how to assign properties from source objects to a destination object.
_.assign({ 'a': 1 }, { 'b': 2 }, { 'c': 3 })
String Manipulation
Lodash includes functions to manipulate strings, such as converting to different cases, trimming, padding, etc. The code sample demonstrates converting a string to kebab-case.
_.kebabCase('Foo Bar')
Function Utilities
Lodash provides function utilities like debounce and throttle to control function invocation. The code sample shows a debounced function that will only be invoked after 250 milliseconds have passed without it being called again.
_.debounce(function() { console.log('Debounced'); }, 250)
Language Utilities
Lodash includes utilities for deep cloning, merging, and comparing objects. The code sample demonstrates deep cloning an object to ensure nested objects are cloned as well.
_.cloneDeep({ 'a': 1, 'b': { 'c': 2 } })
Other packages similar to lodash
underscore
Underscore is a utility library with similar functionality to Lodash, offering a range of functions for manipulating arrays, objects, and functions. It is generally considered to be the predecessor to Lodash, which provides a superset of Underscore's features with additional performance optimizations.
ramda
Ramda is a functional programming library that emphasizes a more functional and composable approach compared to Lodash. It provides similar utilities but focuses on immutability and side-effect free functions, which can lead to a different programming style.
immutable
Immutable.js offers a different take on data manipulation by providing persistent immutable data structures. Unlike Lodash, which works with standard JavaScript objects and arrays, Immutable.js uses its own data structures, which can lead to better performance and easier reasoning about state changes in certain applications.
Lo-Dash v0.2.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.
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
Support
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
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.
Mobile builds, with IE bug fixes and method compilation removed, may be created by using the mobile
argument.
node build mobile
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"
node build mobile 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"
node build mobile exclude=isNaN,isUndefined,union,zip
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
- Ensure
_(...)
returns passed wrapper instances [test] - 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 return true
[test]_.reduceRight
should pass correct callback arguments when iterating objects [test]_.size
should return the length
of 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
_.toArray
_.union
_.uniq
, _.unique
_.values
_.without
_.wrap
_.zip
- plus all
_(...)
method wrappers
Changelog
v0.2.2
- Added mobile build option
- Ensured
_.find
returns undefined
for unmatched values - Ensured
_.templateSettings.variable
is compatible with Underscore.js - Optimized
_.escape
- Reduced dependencies in
_.find
v0.2.1
- 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
v0.2.0
- 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
_(...)
returns passed wrapper instances - 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
v0.1.0
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.
Author
Contributors