Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
A drop-in replacement for Underscore.js delivering performance, bug fixes, and additional features.
tag: v0.3.0

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
build
doc
perf
test
vendor
.gitignore
.gitmodules
.npmignore
LICENSE.txt
README.md
build.js
lodash.js
lodash.min.js
package.json

README.md

Lo-Dash v0.3.0

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

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-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.

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 three ways:

  1. Use the category argument 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"
node build mobile category=collections,functions
  1. Use the include argument to pass the names of the methods to include in the build.
node build include=each,filter,map
node build include="each, filter, map"
node build mobile include=each,filter,map
  1. Use the exclude argument to pass the names of the methods to exclude from the build.
node build exclude=union,uniq,zip
node build exclude="union, uniq, zip"
node build mobile exclude=union,uniq,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

  • Allow iteration of objects with a length property [#148, #154, #252, #448, test]
  • Ensure array-like objects with invalid length properties are treated like regular objects [test, test, test]
  • Ensure _(...) returns passed wrapper instances [test]
  • Ensure _.groupBy adds values to own, not inherited, properties [test]
  • Ensure _.sortedIndex supports arrays with high length values [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
  • _.times
  • _.toArray
  • _.union
  • _.uniq, _.unique
  • _.values
  • _.without
  • _.wrap
  • _.zip
  • plus all _(...) method wrappers

Changelog

v0.3.0

  • Added category build option
  • Added fromIndex argument to _.indexOf and _.lastIndexOf
  • Added //@ sourceURL support to _.template
  • Added thisArg argument to _.sortedIndex and _.uniq
  • Added _.forIn and _.forOwn methods
  • Ensured array-like objects with invalid length properties are treated like regular objects
  • Ensured _.sortedIndex supports arrays with high length values
  • Fixed prototype property iteration bug in _.keys for Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1
  • Optimized _.times and this bindings in iterator methods

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

  • 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.

Author

Contributors

Something went wrong with that request. Please try again.