If, like me, you were expecting a list of usage differences between Underscore.js and Lodash, there's a guide for migrating from Underscore.js to Lodash.
Here's the current state of it for posterity:
- Underscore
_.any is Lodash _.some
- Underscore
_.all is Lodash _.every
- Underscore
_.compose is Lodash _.flowRight
- Underscore
_.contains is Lodash _.includes
- Underscore
_.each doesn’t allow exiting by returning false
- Underscore
_.findWhere is Lodash _.find
- Underscore
_.flatten is deep by default while Lodash is shallow
- Underscore
_.groupBy supports an iteratee that is passed the parameters (value, index, originalArray),
while in Lodash, the iteratee for _.groupBy is only passed a single parameter: (value).
- Underscore.js
_.indexOf with third parameter undefined is Lodash _.indexOf
- Underscore.js
_.indexOf with third parameter true is Lodash _.sortedIndexOf
- Underscore
_.indexBy is Lodash _.keyBy
- Underscore
_.invoke is Lodash _.invokeMap
- Underscore
_.mapObject is Lodash _.mapValues
- Underscore
_.max combines Lodash _.max & _.maxBy
- Underscore
_.min combines Lodash _.min & _.minBy
- Underscore
_.sample combines Lodash _.sample & _.sampleSize
- Underscore
_.object combines Lodash _.fromPairs and _.zipObject
- Underscore
_.omit by a predicate is Lodash _.omitBy
- Underscore
_.pairs is Lodash _.toPairs
- Underscore
_.pick by a predicate is Lodash _.pickBy
- Underscore
_.pluck is Lodash _.map
- Underscore
_.sortedIndex combines Lodash _.sortedIndex & _.sortedIndexOf
- Underscore
_.uniq by an iteratee is Lodash _.uniqBy
- Underscore
_.where is Lodash _.filter
- Underscore
_.isFinite doesn’t align with Number.isFinite
(e.g. _.isFinite('1') returns true in Underscore.js, but false in Lodash)
- Underscore
_.matches shorthand doesn’t support deep comparisons
(e.g., _.filter(objects, { 'a': { 'b': 'c' } }))
- Underscore ≥ 1.7 & Lodash
_.template syntax is
_.template(string, option)(data)
- Lodash
_.memoize caches are Map like objects
- Lodash doesn’t support a
context argument for many methods in favor of _.bind
- Lodash supports implicit chaining, lazy chaining, & shortcut fusion
- Lodash split its overloaded
_.head, _.last, _.rest, & _.initial out into
_.take, _.takeRight, _.drop, & _.dropRight
(i.e. _.head(array, 2) in Underscore.js is _.take(array, 2) in Lodash)