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)