Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Differences between Lodash and Underscore.js [closed]

Why would someone prefer either the Lodash or Underscore.js utility library over the other?

Lodash seems to be a drop-in replacement for underscore, the latter having been around longer.

I think both are brilliant, but I do not know enough about how they work to make an educated comparison, and I would like to know more about the differences.

like image 953
Brian M. Hunt Avatar asked Dec 09 '12 17:12

Brian M. Hunt


2 Answers

I created Lodash to provide more consistent cross-environment iteration support for arrays, strings, objects, and arguments objects1. It has since become a superset of Underscore.js, providing more consistent API behavior, more features (like AMD support, deep clone, and deep merge), more thorough documentation and unit tests (tests which run in Node.js, RingoJS, Rhino, Narwhal, PhantomJS, and browsers), better overall performance and optimizations for large arrays/object iteration, and more flexibility with custom builds and template pre-compilation utilities.

Because Lodash is updated more frequently than Underscore.js, a lodash underscore build is provided to ensure compatibility with the latest stable version of Underscore.js.

At one point I was even given push access to Underscore.js, in part because Lodash is responsible for raising more than 30 issues; landing bug fixes, new features, and performance gains in Underscore.js v1.4.x+.

In addition, there are at least three Backbone.js boilerplates that include Lodash by default and Lodash is now mentioned in Backbone.js’s official documentation.

Check out Kit Cambridge's post, Say "Hello" to Lo-Dash, for a deeper breakdown on the differences between Lodash and Underscore.js.

Footnotes:

  1. Underscore.js has inconsistent support for arrays, strings, objects, and arguments objects. In newer browsers, Underscore.js methods ignore holes in arrays, "Objects" methods iterate arguments objects, strings are treated as array-like, and methods correctly iterate functions (ignoring their "prototype" property) and objects (iterating shadowed properties like "toString" and "valueOf"), while in older browsers they will not. Also, Underscore.js methods, like _.clone, preserve holes in arrays, while others like _.flatten don't.
like image 151
John-David Dalton Avatar answered Nov 05 '22 22:11

John-David Dalton


Lodash is inspired by Underscore.js, but nowadays it is a superior solution. You can make your custom builds, have a higher performance, support AMD and have great extra features. Check this Lodash vs. Underscore.js benchmarks on jsperf and... this awesome post about Lodash:

One of the most useful features, when you work with collections, is the shorthand syntax:
(although Underscore now also supports this syntax)

var characters = [   { 'name': 'barney', 'age': 36, 'blocked': false },   { 'name': 'fred',   'age': 40, 'blocked': true } ];  // Using "_.filter" callback shorthand _.filter(characters, { 'age': 36 });  // Using Underscore.js _.filter(characters, function(character) { return character.age === 36; } );  // → [{ 'name': 'barney', 'age': 36, 'blocked': false }] 

(taken from Lodash documentation)

like image 28
neiker Avatar answered Nov 05 '22 22:11

neiker